zoukankan      html  css  js  c++  java
  • SharePoint 基于 REST API使用简介

    之前已经介绍了SP2010中支持CSOM的API进行远程访问SharePoint,但是CSOM的API仍然有一定的局限性,首先使用CSOM类库是基于.Net的,因此也将使用CSOM限制在了.Net平台上(包括托管的.Net代码,Silver Light 以及Javascript)。如何能在非.Net平台上操作SharePoint数据呢?

    本文简单介绍一下SharePoint REST api的使用方式,笔者本人也没有用到过相关技术进行开发,难免有理解不到位的地方。欢迎大家拍砖。

    读懂此文章,建议你至少大概的知道,什么是REST api,为什么使用REST api,它的优势在哪。本文不会展开讲述讲述REST相关的知识。

    REST API架构

    从SharePoint2013开始,REST被集成到了SharePoint中,你可以创建一个RESTful 的HttpWebRequest来访问SharePoint数据。REST的大体架构如下:

    首先,通过用OData标准,创建一个符合你想要调用的Client Object Model的API所匹配的Http请求。SharePoint服务器端在通过client.svc处理HttpRequest后,会返回相应的Atom或者JSON。

    如何生成一个RESTful的HttpRequest

    在SharePoint的Client Object Model,如果想要获取一个List对象,那么你需要

    Lists.GetListByTitle

    那么对应的Request地址为:http://server/site/_api/lists/getbytitle('listname') 。图片 link 完整的解释了根据CSOM生成HttpRequest的语法。

    因此如果我们需要通过REST API来获取一个List,我们需要写如下的代码:

    HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");
    
    endpointRequest.Method = "GET";
    
    endpointRequest.Accept = "application/json;odata=verbose";
    
    endpointRequest.Headers.Add("Authorization",
    
    "Bearer " +serviceToken
    
    HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();

    如何解决权限的问题

    关于serviceToken如何解决的问题,在msdn找了半天,目前我这边还没找到线程的例子,从msdn上的描述来看,OAuth 的解决方式主要用于host在provider上的app跟SharePoint 服务器间的权限认证。既然REST也是调用CSOM的另一种方式,我们就看一下CSOM是如实现权限的认证的。

    下面我们运行一下SharePoint Client Object Model API 介绍以及工作原理解析 中的例子代码,截获一下这个代码的请求看一下CSOM的权限认证方式:

    我们一共截取到如下的请求信息:

    这里面,主要关注一下最后一次查询的报头:

    这里面我们可以看到,通信主要是通过cookie来进行权限认证的,这里面我们也可以尝试一下用cookie来获取。

    如何获取Cookie

    实际上我们获取cookie只需要用代码来模拟我们截获到的这四次请求即可,让后替换掉里面一些诸如用户名,密码,Expire信息等相关的字符串。由于代码中认证的相关逻辑都是封装在了SharePointOnlineCredentials 这个类中,我们可以反编译看一下封装这个报头的相关逻辑,我们可以直接把里面的代码复制出来获取cookie即可。相关类如下:

    这样getlistbytitle的调用代码如下:

                HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create("https://cnblogtest.sharepoint.com/_api/lists/getbytitle('Documents')");
    
                endpointRequest.Method = "GET";
                endpointRequest.Accept = "application/json;odata=verbose";
                endpointRequest.ContentLength = 0;
                var cookieContainer1 = new CookieContainer();
    
                SharePointOnlineAuthenticationProvider provider = new SharePointOnlineAuthenticationProvider();
    
                endpointRequest.CookieContainer = provider.GetAuthenticationCookie(new Uri("https://cnblogtest.sharepoint.com"), "test001@cnblogtest.onmicrosoft.com",
                    pasword);
    
                HttpWebResponse endpointResponse = (HttpWebResponse)endpointRequest.GetResponse();
    
                var stream = endpointResponse.GetResponseStream();
    
                using (StreamReader sw = new StreamReader(stream))
                {
                    var line = sw.ReadToEnd();
                }

    返回的JSON格式的报文如下:

    这样返回的JSON信息,就可以通过不同的语言来进行解析了。当然,如果你使用的是JS或者其他语言,获取cookie可能有其他方式,这里不再列举。

    此例子用到的代码,可以以不同的编程语言的实现。SharePoint REST API,实现了基于其他语言的来访问SharePoint的可能性,这本身是REST本身的优势,也是SharePoint 2013带给编程人员一个大的功能优势。

     参考文章:

    http://msdn.microsoft.com/en-us/magazine/dn198245.aspx

    http://msdn.microsoft.com/en-us/library/office/jj164022(v=office.15).aspx#WritingData

       

  • 相关阅读:
    Treat wchar_t as built-in type不一致导致的链接错误
    C++ const关键字总结
    安全学习资料网站(持续更新欢迎补充)
    移动端https抓包那些事--进阶篇
    移动端https抓包那些事--初级篇
    drozer工具的安装与使用:之二使用篇
    drozer工具的安装与使用:之一安装篇
    信息安全学习笔记--CSRF
    信息安全学习笔记--XSS
    // 日期操作 封装一些日期常用操作
  • 原文地址:https://www.cnblogs.com/myprogram/p/4004282.html
Copyright © 2011-2022 走看看