天天看点

[sharepoint]Rest api相关知识(转)

最近又开始弄rest api了,通过sharepoint rest api获取站点信息,items,fields非常方便,再结合odata查询,更是得心应手。这里记录学习的时候用到的知识点,以及查询的资料。

在可以使用 rest 服务访问 sharepoint 资源之前,首先必须知道指向该资源的 uri 端点。只要可能,这些 rest 端点的 uri 就会准确地模仿 sharepoint 客户端对象模型中资源的 api 签名。例如:

客户端对象模型方法:            

list.getbytitle(listname).getitems()

rest 端点:            

http://server/site/_api/lists/getbytitle('listname')/items            

但是,在某些情况下,为了遵守 rest 或 odata 约定,端点 uri 会不同于相应的客户端对象模型签名。

下图显示 sharepoint rest uri 的通用语法结构。

sharepoint rest uri 语法结构

[sharepoint]Rest api相关知识(转)

sharepoint 资源的部分端点偏离了这种语法结构:

需要复杂类型作为参数的方法。

如果对应的客户端对象模型方法要求复杂类型作为参数传递,则 rest 端点可能偏离此语法构造说明 rest 限制。

静态方法和属性。

rest 端点偏离代表静态方法和属性的 uri 的语法结构。

确定 sharepoint 2013 rest 服务端点

若要为 sharepoint 资源构造 rest 端点,请按照以下步骤执行操作:

从 rest 服务引用开始:

http://server/site/_api                

指定合适的入口点。例如:

http://server/site/_api/web                

从入口点导航到您要访问的特定资源。这包括为与客户端对象模型中的方法对应的端点指定参数。例如:

http://server/site/_api/web/lists/getbytitle('listname')                

引用端点 uri 中的 sharepoint 2013 rest 服务

使用 _api 来表示端点 uri 中的 sharepoint 2013 rest 服务。rest 服务属于 client.svc web 服务的一部分。但是,要尽早构造 rest uri 以及缩短基础 rest uri 路径,rest 服务使用 _api 将显式引用 client.svc web 服务的需求抽象出来。rest 服务将承认并接受引用 client.svc web 服务的 uri。例如,您可以使用 http://server/site/_vti_bin/client.svc/web/lists 来代替http://server/site/_api/web/lists。但是,使用 _api 是首选惯例。url 限制为 256 个字符,因此,使用 _api 可以缩短基础 uri,以留下更多的字符用于构造剩余 url。

rest 服务的主要入口点表示网站集合以及指定上下文的网站。这样,这些入口点与客户端对象模型中的 clientcontext.site 属性和 clientcontext.web 属性对应。

要访问特定的网站集合,请使用以下构造:

http://server/site/_api/site              

要访问特定的网站,请使用以下构造:

http://server/site/_api/web              

其中 server 表示服务器的名称,site 表示特定网站的名称或路径。

除 /site 和 /web 外,rest 服务包括几个其他访问点,通过这些访问点,开发人员可导航至特定功能。下表列出了部分访问点。

功能区域

访问点

网站

http://server/site/_api/site

web

http://server/site/_api/web

用户配置文件

http:// server/site/_api/sp.userprofiles.peoplemanager

搜索

http:// server/site/_api/search

发布

http:// server/site/_api/publishing

导航到您要访问的特定资源

从这里,通过遍历对象模型并使用用斜杠分隔的客户端对象模型中 api 的名称构造多个特定 rest 端点。下表显示客户端对象模型调用及等效 rest 端点示例。

客户端对象模型 api

rest 端点

clientcontext.web.lists

http://server/site/_api/web/lists

clientcontext.web.lists[guid]

http://server/site/_api/web/lists(‘guid’)

clientcontext.web.lists.getbytitle("title")

http://server/site/_api/web/lists/getbytitle(‘title’)

终结点 uri 不区分大小写。例如,在上表中,使用 /getbytitle 指定 getbytitle() 方法的 rest 等效项。

sharepoint 2013 扩展了 odata 规范,允许您使用括号来指定方法参数和索引值。这可防止包含多个名称相同参数的 uri 中的潜在混淆问题。例如,下面两个 uri 包含名称相同的参数:

http://server/site/_api/web/lists/getbytitle('announcements')/fields/getbytitle('description')            

http://server/site/_api/web/lists('<guid>')/fields/getbyid('<guid>')            

要指定多个参数,请将参数作为名称/值对包含在内,并用逗号将参数分隔。例如:

http://server/site/_api/web/getavailablewebtemplates(lcid=1033, includecrosslanguage=true)            

下图显示了 sharepoint rest 参数语法。

sharepoint rest 参数语法

[sharepoint]Rest api相关知识(转)

些方法要求大的有效载荷作为参数。对于要与其对应客户端对象模型 api 保持功能平衡的 rest 端点,这些端点必须接受复杂类型作为参数。在这种情况下,rest 服务扩展了现有 odata 协议,允许这些 rest 端点接受单个复杂类型作为参数。这仅适用于 post 操作,并且您必须根据 odata 标准以 atom 格式或 json 格式传递复杂类型。

例如,listcollection.add 方法以 microsoft.sharepoint.client.listcreationinformation 对象作为参数。要将列表添加到指定网站,请按如下方式构造相应的 rest 端点:

http://server/site/_api/web/lists/add              

然后,在请求正文中传递复杂类型,此处使用 json 进行格式设置。

[sharepoint]Rest api相关知识(转)
[sharepoint]Rest api相关知识(转)

在 rest 服务调用中使用参数别名

您可以在 odata 中使用"参数别名"语义将参数传递到 sharepoint rest 端点。在参数别名中,用参数调用中的别名标识参数值,而实际值则在 uri 的查询字符串中指定。这允许您通过使用查询字符串支持多种类型的字符和一致的格式。

例如,以下两个 rest uri 为等效项:

直接指定参数值:              

http://server/site/_api/web/applywebtemplate("sts#0")              

使用参数别名,并在 uri 的查询字符串中指定实际参数值:              

http://server/site/_api/web/applywebtemplate(title=@template)?@template="sts#0"              

但是,sharepoint rest 服务不支持通过参数别名传递复杂类型。例如,以下 uri(参数别名中包含复杂类型)不受支持:

http://server/site/_api/userprofiles/people(7)/getworkplace(@address)?@address={"__metadata":{"type: "odatademo.address"},"street":"ne 228th", "city":"sammamish","state":"wa","zipcode":"98074","country": "usa"}              

sharepoint rest 服务参数别名语法

[sharepoint]Rest api相关知识(转)

指定字典作为参数值

对于与以 dictionary<string, string> 字典作为参数的方法相对应的 rest 端点,在查询字符串中将字典作为一组以逗号分隔的名称/值对传递。

dictionary 参数 rest 服务语法

[sharepoint]Rest api相关知识(转)

dictionary<string, object> 表示为多值对象,命名为 keyedpropertyvalue,并具有以下字符串属性:

key 多值对象的键

value 对象的值

valuetype 对象的值类型。对于映射到现有实体数据模型 (edm) 类型的简单值类型,rest 服务返回相应的 edm 类型字符串;例如,"edm.string"。如果不是,则 rest 服务返回由 type.tostring 功能返回的值类型。

在查询字符串中指定参数值

如果您的 rest uri 以方法调用结束,则可以使用查询字符串语法来指定方法的参数值。例如:

http://<server>/<site>/_api/web/applywebtemplate?template="sts#0"              

下图显示查询字符串中参数的 rest 服务语法。

查询字符串中参数的 rest 服务语法

[sharepoint]Rest api相关知识(转)

指定静态方法和属性作为 rest 服务 uri

要构造与静态方法或属性对应的 uri,请使用 ecmascript 对象模型中的对应 api 名称,该名称以命名空间声明开始并使用点记法 。例如,ecmascript 客户端对象模型中的 sp.utilities.utility.getimageurl(imagename) 将具有以下 rest 等效物:

http://server/site/_api/sp.utilities.utility.getimageurl('imagename')            

但是,静态属性只能直接访问,不允许作为较大 uri 组成的一部分。例如,允许直接访问 rest 中的 sp.utility.assetslibrary 方法,如下所示:

http://server/site/_api/sp.utility.assetslibrary/id            

但是,不允许将该资源位置用作更复杂 uri 的参数,如下面的示例所示:

http://server/site/_api/getlist(~sp.utility/assetslibrary/id)            

下图显示 sharepoint rest 服务静态成员语法。

sharepoint rest 服务静态成员语法

[sharepoint]Rest api相关知识(转)

rest api对我来说,刚开始是个小白,到现在用的越来越顺手,其中msdn对我来说帮了不少的忙,没空就看msdn,觉得这篇文章讲的还是比较清楚的,就收集到自己的博客中了。

参考文章:

<a href="https://msdn.microsoft.com/zh-cn/library/office/dn292556.aspx" target="_blank">https://msdn.microsoft.com/zh-cn/library/office/dn292556.aspx</a>

<a href="https://msdn.microsoft.com/zh-cn/library/dn551366.aspx" target="_blank">https://msdn.microsoft.com/zh-cn/library/dn551366.aspx</a>

<a href="https://msdn.microsoft.com/zh-cn/library/office/fp142380(v=office.15).aspx" target="_blank">https://msdn.microsoft.com/zh-cn/library/office/fp142380(v=office.15).aspx</a>

<a href="https://msdn.microsoft.com/zh-cn/library/gg309461.aspx" target="_blank">https://msdn.microsoft.com/zh-cn/library/gg309461.aspx</a>

<a href="https://msdn.microsoft.com/en-us/library/jj860569.aspx" target="_blank">https://msdn.microsoft.com/en-us/library/jj860569.aspx</a>

博客地址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

博客版权:

本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。

如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!

再次感谢您耐心的读完本篇文章。

继续阅读