SharePoint 2013的REST编程基础

1. SharePoint 2013对REST编程的支持

自从SharePoint2013开始, SharePoint开始了对REST 编程的支持,这样除了.NET , Silverlight, Powershell之外, 又多了一种可以和SharePoint Server进行CSOM编程的方式。那么,问题来了:什么是REST呢?什么是ODATA?为什么这么多产品都开始支持这个了?

 

2. 什么是REST & ODATA?

如果这个世界上只有一家IT公司就好了,这样就不需要REST了 :) 但是很显然,这是不可能的。不同IT公司有自己提出的技术标准及解决方案。以Microsoft为例,其实现分布式处理的技术和解决方案发展历程如下:COM -> DCOM -> COM+ ,跨入.NET时代,又出现了 Enterprise Component -> Web Service -> Web Service Enhancemant -> WCF ...

可以看到,仅仅一家公司,其提出的技术和解决方案就如此之多。在加上IBM, Google等等大鳄,就形成了各自为政,群雄混战的局面。这样的解决就是:在各自的系统和技术内,大家各自搞自己的。很显然这是不符合时代发展的 :) 比如没有任何一家公司,只用某一家IT公司的解决方案。不同公司的系统之间,也需要互相通讯。

 

那怎么解决这个问题呢?大家握手言和吧:制定一个基于HTTP协议的标准。HTTP协议是目前为止,最通用和成功的协议。如果某个公司说我就是不遵守HTTP协议,那他就没法转了。 因此,只要大家遵循这个标准,系统之间都可以互相通信。如果利用Microsoft的技术开发了一个服务,只要这个服务遵循这个标准,采用IBM技术的客户也可以consume这个服务,那不是很好吗? 因此这就是REST服务出现的现实需要。

 

言归正传,什么是REST 服务呢?

REST的全称是: Representational state transfer (有点绕口 :)), 她的基本思想是:可以通过基于HTTP协议发出的不同 操作:Create, Read, Update, and Delete (CRUD), 来实现对数据的操作。其有三大基本特征:

1) 客户端- 服务端:

 所以数据都存储在服务端,客户端不知道也无需知道服务端如何处理的,只需要发送一个HTTP请求。

2) 无状态:

这个比较抽象。打个比方:

你申明一个proxy去调用服务器端的求和函数 proxy.sum(1,2) ,服务器端返回3给客户端。 当你再次调用proxy.sum(3,4)的时候,如果是无状态的话,其是不会记住你上次操作的结果的,也就是其会返回7;但是如果是有状态的操作,其会记录上一次调用的结果,并把这次结果累加再返回给客户端,也就是3+7=10.

3)可缓存的

4)分层的

5) 统一的接口

以下是关于REST的Wiki解释:

http://en.wikipedia.org/wiki/Representational_state_transfer

 

3. 如何实现一个RESTful服务

实现一个RESTful服务的方案有很多。以Microsoft的.NET解决方案为例, WCF3.5就开始了对REST服务的支持。你可以用WCF轻松创建一个 WCF REST API服务供其它客户端consume.

有关如何通过WCF 实现一个REST服务,可以参考下面的文档:

https://msdn.microsoft.com/en-us/magazine/dd315413.aspx

 

4 如何过滤和选择数据

如何让服务器返回自己真正想要的数据呢? 其实ODATA提供了丰富的数据过滤和选择操作:

1)$filter : 过滤数据

2) $select : 选择需要的字段

3) $expand: 扩展返回的属性

4) $orderby:排序

5) $top:返回前N条数据

 

5. SharePoint 2013对REST服务的支持

SharePoint 2013 实现了REST服务的支持,这样我们又多了一种途径可以访问SharePoint了。实际上SharePoint的REST服务是一个通过叫做client.svc的WCF REST服务来实现的。其URL为:https://sharepointserver/_vti_bin/client.svc

1) SharePoint 2013的REST服务部署的路径如下:

https://servername/sitename/_api/....

实际上上面这个地址只是其原始服务的一个别名(alias), 毕竟打出完成的client.svc有点丑陋哦。

比如:

https://winstononline.sharepoint.com/_api/...

https://winstononline.sharepoint.com/sites/spdev/...

 

2) SharePoint 2013支持的命名空间:

要对SharePoint 2013发出一个REST请求,必须指明你所要访问的namespace。支持的namespace包括:

   a) _api/web

   b) _api/site

   c) _api/search

   d) _api/publishing

 

例如: 我想返回一个叫做Doctest的list里面ID为3的item,并且只返回ID字段:

http://winstononline.sharepoint.com/_api/web/lists/Doctest/items?$filter=ID eq 3 & $select=ID

又如:

https://winstononline.sharepoint.com/_api/web/lists/Doctest/items?$select=ID & $orderby=ID

复制代码

  <?xml version="1.0" encoding="utf-8" ?> - <feed xml:base="https://winstononline.sharepoint.com/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>b3c0e660-6937-4da9-b1cf-c1bd6613be1a</id> <title  /> <updated>2015-02-04T07:22:31Z</updated> - <entry m:etag=""3""><id>bccd25b6-c6cf-4748-a75b-aca5b6826fe8</id> <category  term="SP.Data.DoctestItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <link  rel="edit" href="Web/Lists(guid'906b7bcc-bd4f-4d8c-9e46-6e01b5579d5f')/Items(1)" /> <title  /> <updated>2015-02-04T07:22:31Z</updated> - <author><name  /> </author>- <content type="application/xml">- <m:properties><d:Id m:type="Edm.Int32">1</d:Id> <d:ID m:type="Edm.Int32">1</d:ID> </m:properties></content></entry>- <entry m:etag=""4""><id>7604db11-97fa-4433-b652-51eb70b013d9</id> <category  term="SP.Data.DoctestItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <link  rel="edit" href="Web/Lists(guid'906b7bcc-bd4f-4d8c-9e46-6e01b5579d5f')/Items(2)" /> <title  /> <updated>2015-02-04T07:22:31Z</updated> - <author><name  /> </author>- <content type="application/xml">- <m:properties><d:Id m:type="Edm.Int32">2</d:Id> <d:ID m:type="Edm.Int32">2</d:ID> </m:properties></content></entry>- <entry m:etag=""2""><id>ec2a5b46-ae8f-4334-8a85-9a777660021c</id> <category  term="SP.Data.DoctestItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <link  rel="edit" href="Web/Lists(guid'906b7bcc-bd4f-4d8c-9e46-6e01b5579d5f')/Items(3)" /> <title  /> <updated>2015-02-04T07:22:31Z</updated> - <author><name  /> </author>- <content type="application/xml">- <m:properties><d:Id m:type="Edm.Int32">3</d:Id> <d:ID m:type="Edm.Int32">3</d:ID> </m:properties></content></entry></feed>

复制代码

 

6. SharePoint客户端技术对REST服务的支持

如果采用上面发送REST请求的方法来和SharePoint进行交互,可以很容易的执行各种操作。但是唯一的确定是没法进行批量化的操作。为了让客户端采用javascript来调用SharePoint REST的时候更加友好和强大,SharePoint提供了2个javascript类库,分别为sp.js和sp.runtime.js, 其位于_layouts/15/###.js下。与开发者相关的,更多的是sp.js里面的定义。这样所有的REST操作都被封装在sp.js里定义的API 里面,显得更加友好。

下面是通过Napa创建的一个default sharePoint App, 里面就用到了SP.js。

复制代码

<%-- The following 4 lines are ASP.NET directives needed when using SharePoint components --%>
<%@ Page Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~masterurl/default.master" Language="C#" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%-- The markup and script in the following Content element will be placed in the <head> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server"><script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"></script><script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script><script type="text/javascript" src="/_layouts/15/sp.js"></script><!-- Add your CSS styles to the following file --><link rel="Stylesheet" type="text/css" href="../Content/App.css" /><!-- Add your JavaScript to the following file --><script type="text/javascript" src="../Scripts/App.js"></script>
</asp:Content><%-- The markup in the following Content element will be placed in the TitleArea of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">Page Title
</asp:Content><%-- The markup and script in the following Content element will be placed in the <body> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server"><div><p id="message"><!-- The following content will be replaced with the user name when you run the app - see App.js -->initializing...</p></div></asp:Content><!--app.js-->var context = SP.ClientContext.get_current();
var user = context.get_web().get_currentUser();(function () {// This code runs when the DOM is ready and creates a context object which is // needed to use the SharePoint object model$(document).ready(function () {getUserName();});// This function prepares, loads, and then executes a SharePoint query to get // the current users informationfunction getUserName() {context.load(user);context.executeQueryAsync(onGetUserNameSuccess, onGetUserNameFail);}// This function is executed if the above call is successful// It replaces the contents of the 'message' element with the user namefunction onGetUserNameSuccess() {$('#message').text('Hello ' + user.get_title() +"This is my first Napa app");}// This function is executed if the above call failsfunction onGetUserNameFail(sender, args) {alert('Failed to get user name. Error:' + args.get_message());}})();function getParameterByName(name)
{}

6. 调用SharePoint REST服务示例

未完待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Office Web App2013 在线查看PDF文件

经常会有客户问&#xff0c;在SharePoint中&#xff0c;如何在浏览器中查看与编辑文档&#xff0c;通常给出的解决方案是集成Office Web App。 而在实际应用过程中&#xff0c;客户通常会要求实现PDF文件在线查看&#xff0c;对于PDF文件&#xff0c;office web App微软一直没…

Office Web Apps 2013 修改Excel在线查看文件大小限制

最近搭建了一个OWA 2013环境&#xff0c;帮客户实现在线查看Excel文档&#xff0c;不过&#xff0c;使用过程中出现了错误&#xff0c;文件大小超过10MB就无法预览了&#xff0c;查了好久&#xff0c;发现需要使用PowerShell命令进行修改。 1.出现的错误的截图&#xff1a; 2.可…

Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

Azure Storage 是微软 Azure 云提供的云端存储解决方案&#xff0c;当前支持的存储类型有 Blob、Queue、File 和 Table。 笔者在《Azure Table storage 基本用法》一文中&#xff0c;介绍了 Table Storage 的基本用法&#xff0c;本文将通过 C# 代码介绍 Blob Storage 的主要使…

Azure Table storage 基本用法 -- Azure Storage 之 Table

Azure Storage 是微软 Azure 云提供的云端存储解决方案&#xff0c;当前支持的存储类型有 Blob、Queue、File 和 Table&#xff0c;其中的 Table 就是本文的主角 Azure Table storage。 Azure Table storage 是一个在云端存储结构化 NoSQL 数据的服务&#xff0c;它不仅存取速…

C# Azure 存储-Blob

1. 前言 本文是根据Azure文档与本人做了验证之后写的。 如果想下载微软官网的demo&#xff0c; 请前往github https://github.com/Azure-Samples/storage-blob-dotnet-getting-started 2. 介绍 Azure Blob是存储很大空间的服务&#xff0c;能允许存储与访问通过http或https。…

蜗牛星际ABCD款,这几款的区别你知道吗?

前言 本次文章有可能篇幅会超长&#xff0c;由于全部内容&#xff0c;可能导致万字长文&#xff0c;所以&#xff0c;本篇已经适当做了精简&#xff0c;只针对我目前拥有的蜗牛进行一些介绍&#xff0c;会附带一些教程链接。 每一个功能的实现&#xff0c;以后我都会单独写详…

蜗牛星际 --【功耗测量】

蜗牛星际b单千兆 正面 测量对象&#xff1a;蜗牛星际b单千兆 配置&#xff1a; j1900 16g 固态 4g ddr3l 内存 关机功耗 蜗牛星际待机功耗 蜗牛星际关机的情况下待机功耗为0.6w&#xff0c;一个月消耗不到两毛四分&#xff0c;一年不到三块钱。 开机功耗 未挂硬盘的情况下…

蜗牛星际:NAS从入门到放弃

预警1&#xff0c;蜗牛矿渣大批量上市是2019年3月的事情了。我写这个大概是2019年10月前后。我挑的最好的时候下手&#xff0c;C款全装只花了245包邮。现在由于市面上货量减少&#xff0c;价格上涨&#xff0c;已经没有原来那么高的性价比了。就连单卖的机箱也从原来的50包邮涨…

Dynamics 365 CRM 开发架构简介

目录 概览 名词解释连接到Dynamics 365 CRM Web APIOrganization service选择 - Web API vs. Organization service扩展服务端扩展应用端正文 Dynamics 365 CRM提供了多种编程模型&#xff0c;你可以灵活地按需选用最佳模式。 本文是对Dynamics 365 CRM编程模型的综述。 回…

Azure手把手系列 1:微软中国公有云概述

很久没有写文章了&#xff0c;主要也是疏于自己的懒惰&#xff0c;对于IT技术的放弃&#xff0c;但我相信浪子回头金不换&#xff0c;所以我又回来了。 相信现在还在泡博客的还在做IT的&#xff0c;或多或少都听过云、私有云及公有云的概念&#xff0c;那么今天给大家分享的是微…

Azure手把手系列 2:微软中国云服务介绍

在前面的文章中&#xff0c;我们已经了解到Azure有两种&#xff0c;分别是由微软直营的国际版&#xff0c;以及微软中国委托21世纪互联运营的国内版&#xff0c;两种Azure存在一定差异&#xff0c;并且数据不互通、帐号以及计费不统一。所以在选择微软公有云的时候也需要注意&a…

Azure手把手系列 3:把IT的钱花在刀刃上

对于Azure以及公有云的了解&#xff0c;可谓是永无止境的&#xff0c;用一句客户的话来说就是Azure是大海&#xff0c;只要你往前航行&#xff0c;一定能时不时的发现宝藏&#xff1b;Azure好比是一座冰山&#xff0c;当你以为你已经对Azure很熟悉了&#xff0c;其实这只是冰山…

Azure手把手系列 4:深入了解Azure 一块钱当三块用

通过前面的文章&#xff0c;相信大家对Azure有了一个基础的认识&#xff0c;接下来&#xff0c;我们再来看下作为企业&#xff0c;选择公有云服务最重要的因素之一 价格。我们都知道所谓公有云&#xff0c;就是要让IT资源变成我们生活中类似于水电气的资源&#xff0c;按需使用…

【Python CheckiO 题解】Feed Pigeons

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

使用VS code 创建 Azure Functions,从blob触发,解析,发送至Service Bus

场景: 某设备定时于每天23&#xff1a;00左右将一天的运行日志.devicelogtxt上传到Azure Blob&#xff0c;期待Blob文件上传后, 自动通过Azure Functions 解析文件并将文件内容写入到服务总线Service Bus的队列中。 上传的文件格式为&#xff1a; 步骤&#xff1a; 下载并安装…

Power Platform之Power Automate新增RPA功能

​ 什么是RPA RPA&#xff08; Robotic Process Automation 机器人流程自动化软件&#xff09;&#xff0c;是一种新型的人工智能的虚拟流程自动化机器人。RPA的核心是通过自动化、智能化技术来“替代人”进行重复性、低价值、无需人工决策等固定性流程化操作&#xff0c;从而…

Hyper-V第1代虚拟机和第2代虚拟机特性对照表

本文《Hyper-V第1代虚拟机和第2代虚拟机特性对照表》系小编在小伟博客看到的文档&#xff0c;转载给大家一起学习。 在 Windows Server 2012 R2 和 Windows 8.1 中内置的 Hyper-V 功能&#xff0c;新增了一种“第二代”虚拟机&#xff0c;从虚拟硬件的层面进行了提升&#xff0…

【转】五大方法,彻底永久关闭win10自动更新的方法【已验证有效】

自从微软大面积使用某员工后&#xff0c;思路越来越奇葩了&#xff0c;前天工作没做完&#xff0c;放在那里&#xff0c;第二天毫无羞耻的就给你重启了&#xff0c;那一瞬间&#xff0c;真想拿dollar到对面slay。于是就有下文&#xff0c;大部分内容是从网上摘录、归纳起来的。…

【Python CheckiO 题解】Probably Dice

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…