拥抱开源,Office 365开发迎来新时代
前言
作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日。自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软件巨头都纷纷支持,在广大程序员心目中,也更是精神图腾一般的存在,坊间戏言它是最大的同性交友平台。
我自己对开源了解不多,并且能力也有限,一直没有在这方面有所贡献,但我肯定和大家一样都是Github的受益者。今天这篇文章一方面是希望借此为Github庆生(本来是上周想写,但一直没有时间),另外也是因为最近有开源社区的朋友邀请我有机会谈一谈这些年Office 开发(尤其指Office 365开发)中对开源的支持,因为工作的关系,我多多少少知道一点,就斗胆写出来,也算是向“开源”精神致敬吧,请大家参考。
本文以及这个系列文章都是托管在
Github
上面,用markdown
这种自由奔放的轻量级标记语言写成,使用的工具Visual Studio Code
也是开源的,欢迎到https://github.com/chenxizhang/office365devlabs 上面来提issue
,欢迎给我star
给我鼓励,欢迎fork
这个repo
并且通过pull request
提交你的见解。
微软的开源行动
微软这几年内部进行了深刻的转型,为外界所熟知的除了有业务方向的变化、组织的调整、股价的飞涨之外,时不时会有一些让业界“看不懂”的新动作,过去的不多说,今天最新的一个劲爆新闻是微软也要推出自己定制版本的Linux,不仅让人感慨这世界到底怎么了。
但要论起微软在开源方面的努力,其实在多年前就开始了。2006年前后,微软发布了Codeplex网站,当时也是规模不小的开源代码托管平台,微软自己有很多著名的项目,都是在这个平台上面开放源代码,包括ASP.NET等,后来的故事大家也差不多知道,随着Github的崛起并且成为事实上的标准,微软将几乎所有项目迁移到了Github,并且于2017年12月份正式封存了Codeplex(目前继续提供只读查询,和下载服务)
2014年4月,微软宣布成立.NET基金会,同时宣布释出.NET编译器平台Roslyn,作为开放源代码软件。11月释出在服务器上运行的.NET Core源代码,交由.NET基金会管理,鼓励自由软件社群参与将.NET软件平台移植到Linux与Mac OS上。基金会由开源社区的大神Miguel领衔,管理着55个正式的项目,不少业界的知名公司也是基金会的重要成员,包括Google,三星等。
值得一提的是,.NET基金会的源代码也是托管在Github上面的,地址是 https://github.com/dotnet
回到Github上面来,据不完全统计,目前微软员工参与Github的人数是全世界最多的,所有项目获得Star总数组织排名全世界第三。下面我有一个不完全的统计,开源看出近四年来,微软在Github上面的贡献稳步攀升的表现,目前的Repository数量至少有 2054 个。
目前在Github上面,微软最受欢迎的40个项目如下
Office 365开发拥抱开源
那么,我们来看看Office 365的开发,到底跟开源有什么关系呢?在Github上面,微软除了有一个最大的组织(https://github.com/microsoft)外, 还有两个跟Office 365开发直接相关的组织,他们分别是
- SharePoint 开发 :https://github.com/sharepoint
- Office 365 开发 :https://github.com/officedev
SharePoint开发十大最受欢迎项目如下所示
Office 365开发中star数量超过100个16个项目如下
以上是微软产品组不断贡献出来的一些项目。接下来,我还要谈一下在Office 365开发的不同层面,我们是如何支持开源平台的。目前来说,我们一般将Office 365的开发分为如下几个领域
- 使用Microsoft Graph将你的业务应用与Office 365无缝整合。
- 通过Office Add-in的技术扩展你熟悉的Office应用程序。
- 通过SharePoint Add-in的技术打造基于SharePoint的业务应用。
- 基于Microsoft Teams开发智能机器人或者业务选项卡、连接器应用。
Microsoft Graph对于开源平台的支持
使用 Microsoft Graph API 轻松连接到可加快工作效率的数据 – 邮件、日历、联系人、文档、目录、设备以及在这些数据中发现有价值的信息 —— 不夸张地说,如果说员工和知识是企业的两大无形资产的话,那么Microsoft Graph就是一个宝藏,它不仅代表着现在,也意味着未来极大的可能。
为了让Microsoft Graph能够极大地方便开发者调用,从一开始的设计理念,就是要支持所有的开发平台,不管是开源的,还是不开源的。这一点是由Microsoft Graph的工作机制来保证的 —— 它就是一套标准的REST API。
这些API都是返回Json数据格式,而且完全基于OData的规范设计,支持标准的查询参数。
除了REST API ,微软也有针对主流的平台提供了SDK,可以加快开发的速度。
使用Visual Studio Code快速开发Office Add-in
我此前有过一篇文章专门介绍这个主题,这里简单地整理几个要点。
要开发Office Add-in,你现在有多个选择
- 如果你是Visual Studio的资深用户,你的经验可以很好地复用,Visual Studio 2017提供了开箱即用的Office Add-in模板,几次点击就可以创建一个项目,并且可以一键进行调试。
- 与此同时,你可以使用Visual Studio Code这个开源的编辑器,结合 NodeJS、 Typescript、React、JQuery 等开源平台和框架来构建你的Office Add-in,在设计你的UI时,你还开源直接使用微软开源的Office Fabric UI呢。
下面我演示一个基本的步骤
安装环境(NodeJS,Visual Studio Code)
安装Office Add-in项目生成器
npm install -g yo generator-office
创建项目
yo office
在Visual Studio Code中编辑和调试项目
Visual Studio Code的话题也许三天都讲不完,通过上述的介绍,大家可以看到现在开发Office Add-in是一种全新的体验,你可以使用你最熟悉的编辑器,搭配你最喜欢的框架来工作。
全新的SharePoint Framework,全新的组件式开发体验
与Office Add-in一样,我此前也已经有专门的文章介绍和演示了SharePoint Framework的开发体验,这里也仅仅是将与开源相关的内容重点整理给大家参考。
安装环境(NodeJS,Visual Studio Code)
安装模块
npm install -g yo gulp
安装SharePoint Framework 项目模板
npm install -g @microsoft/generator-sharepoint
创建项目
yo @microsoft/sharepoint
推荐使用React运行和调试项目
gulp serve
在Visual Studio Code中编辑项目(图略)
部署项目
gulp bundle
,gulp package-solution
Microsoft Teams的扩展开发体验
Microsoft Teams是Office 365中一个重要的创新,它可以将团队协作提升到一个新的层次。从另一方面,开发人员也可以在这个平台上面拥有全所未有的能力,例如
- 为Teams定制智能会话机器人 (Bot),以全新的交互方式为用户提供服务
- 将业务应用,以选项卡(Tab)的方式集成到Teams的频道中来
- 定制消息扩展(Message Extension)及连接器(Connector,Webhook),与外部系统进行松耦合式的对接
听起来有点复杂,但其实做起来真的不难,请参考下面的步骤
安装环境(NodeJS,Visual Studio Code)
安装Teams项目模板
npm install yo generator-teams -g
创建Teams项目
yo teams
在Visual Studio Code中编辑项目
你可以通过上面的步骤快速创建一个Microsoft Teams应用,但是要做出来一个真正可用的App,你毫无疑问还需要更多的时间,请参考官方的文档 https://docs.microsoft.com/zh-cn/microsoftteams/platform/
结语
本文带领大家回顾了一下开源及社区的发展、微软在开源方面的努力,以及具体在Office 365开发的四个领域如何张开双手拥抱开源。一千个人的心目中有一千个哈姆雷特,但开源的精神应该只有一个,它不仅仅是开放源代码,它是一种开放的心态;同时开源需要更多的人参与、去贡献,只有这样,我们的“源”头活水才会生机勃发,越来越"开"阔。笔者今年的小目标是除了维护之前的一个小的开源项目外,争取参与到微软官方的几个大的Office 365开源项目中去做一点贡献,也希望看到更多的开发人员参与进来。
拥抱开源,Office 365开发迎来新时代的更多相关文章
- Office 365开发概述及生态环境介绍(一)
原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...
- Office 365开发概述及生态环境介绍(二)
本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...
- Python在Office 365 开发中的应用
我在昨天发布的文章 -- 简明 Python 教程:人生苦短,快用Python -- 中提到了Python已经在Office 365开发中全面受支持,有不同朋友留言或私信说想了解更加详细的说明,所以特 ...
- [ Office 365 开发系列 ] 开发模式分析
前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...
- Office 365 开发概览系列文章和教程
Office 365 开发概览系列文章和教程 原文于2017年2月26日首发于LinkedIn,请参考链接 引子 之前我在Office 365技术社群(O萌)中跟大家提到,3月初适逢Visual St ...
- Office 365开发环境概览
本文于2017年3月26日首发于LinkedIn,原文链接请参考这里 本系列文章已经按照既定计划在每周更新,此前的几篇文章如下 Office 365 开发概览系列文章和教程 Office 365开发概 ...
- 《Office 365 开发入门指南》公开邀请试读,欢迎反馈
终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 365开发人员写一些东西并最终能帮到更多中国用户的想法,而从2月26日正式写下 ...
- 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广
我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问 https://aka.ms/office365devlesson 这个短地址 ...
- 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市
今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光 ...
随机推荐
- 解决exlicpe以debug模式启动或运行速度非常慢的问题
该问题可能是由于eclipse和tomcat的交互而产生的, 在以debug模式启动tomcat时,发生了读取文件错误, eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法如下:以 ...
- Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp
前言: IOS的文章,今天,再来补一篇,Sagit的教程: 虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜 Sagit 开源地址:https://github.com/cyq1162/Sagi ...
- Java虚拟机16:Metaspace
被废弃的持久代 想起之前面试的时候有面试官问起过我一个问题:Java 8为什么要废弃持久代即Metaspace的作用.由于当时使用的Java 7且研究重心不在JVM上,一下没有回答上来,今天突然想起这 ...
- DEVC使用问题集锦
一.DEVC++编译出现"Id return 1 exit status" 这是初学者刚用DEVC经常碰到问题,一般有如下解决方法: 1.首先检查下是否有c的exe程序开着,若开着 ...
- C语言最后一次作业——总结报告
1.当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 首先是因为自己想学跟做动画沾边的专业(动画专业因为某 ...
- 2017 国庆湖南 Day6
期望得分:100+100+60=260 实际得分:100+85+0=185 二分最后一条相交线段的位置 #include<cstdio> #include<iostream> ...
- nyoj 阶乘0
阶乘的0 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 计算n!的十进制表示最后有多少个0 输入 第一行输入一个整数N表示测试数据的组数(1<=N< ...
- ASCII排序
ASCII码排序 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符. 输入 第一行输 ...
- PHP trait
ps:由于PHP是单继承的,无法继承多个类所以可以用triat(关键字,特性)来命名达到子类继承多个父类的效果:暂且理解为类吧.class = trait <?php trait A { pub ...
- redis命令详解
redis中添加key value元素:set key value; 获取元素:get key ; redis中添加集合:lpush key value1 value2 value ...