LoginSignup
17
17

More than 3 years have passed since last update.

SharePointへのHTTPリクエスト(RESTサービス)の送り方(JSONもあるよ)

Last updated at Posted at 2019-06-18

はじめに

SharePointのポータルサイトを構築している時に多用するRESTをメモ帳を兼ねて記述しています。
ヘッダ記述すればFlowでも使えます。
(REST-APIは、URL欄に直接入れて叩くとxmlで返ってくるのですが可読性に難があるので、
ヘッダの記述でJSONでレスポンス返すようにリクエストを送っています。)

*6/19追記:コピペする時に、リスト内容取得のところのコードが変になってたのを修正(ごめんなさい)&表示名か内部名かを追記。
6/20追記:別パターンのコード追加。
6/22追記:ヘッダについての追記と、具体的なJSON記述法を追記。

どんな時に使うのか

私は大抵Flowと組み合わせて使っています。(Flowの汎用性向上目的で、リスト名などを変数として置くため)
HTTPリクエスト⇒レスポンスのbodyをJSON解析⇒変数に置く⇒適宜使用。
変数に置いた後どう使えばいいかは、ほかの方の記事ですがMicrosoft Flow で SharePoint のリストアイテムを HTTP要求(REST)で更新するあたり参考になりますので、組み合わせて使ってください。

ヘッダ部分

※Flowで使う時は["]を取って下さい。

GETの時

Accept : "application/json;odata=verbose"
Content-Type : "application/json;odata=verbose"
※そのままだとXML形式で返ってきて可読性に難があるので、
「JSONで返してね」という内容です。

POSTの時

GETの時のヘッダにプラスして
X-HTTP-Method : "MERGE"
IF-MATCH : "*"
※POST要求の時、クエリでフィルターするだけなら上記のヘッダはいらないです。
POSTでアイテム更新する場合は、上記のヘッダにプラスして
リストアイテムのエンティティ型の内部名"ListItemEntityTypeFullName"が必要です。
("ListItemEntityTypeFullName"の取り方は後述します)

サイト(サイトコレクション)の情報を取得

サイトの情報取得
https://[サイトアドレス]/_api/web/

何に使う?⇒サイトの相対パス"ServerRelativeURL"を取得するため。(変数に置き換えてテンプレ化するのに使う)
GETメソッドで上記の「サイト情報取得」を使用してHTTPレスポンスを得た後、
「データ操作」⇒「JSONの解析」アクションを選ぶ。
コンテンツに「サイト情報取得」の本文を選び、下記スキーマを記述。

サイト相対パスを取得するJSON
{"type": "object",
    "properties": {
        "d": {
            "type": "object",
            "properties": {
                "ServerRelativeURL": {
                    "type": "string"
                }
            }
        }
    }
}

リストの内容取得

リストの内容取得
https://[サイトアドレス]/_api/web/GetList('[サイトコレクションの相対パス]/Lists/[リスト内部名]')
or
https://[サイトアドレス]/_api/web/lists/getbytitle('[リスト表示名]')

何に使う?⇒リストのGUID"Id"や、リストタイトル"Title"、リストアイテムのエンティティ型名"ListItemEntityTypeFullName"を取得する。
GETメソッドで上記の「リスト内容取得」を使用してHTTPレスポンスを得た後、
「データ操作」⇒「JSONの解析」アクションを選ぶ。
コンテンツに「リスト内容取得」の本文を選び、下記スキーマを記述。

ListItemENtityTypeFullName,Title,GUIDを取得するJSON
{"type": "object",
    "properties": {
        "d": {
            "type": "object",
            "properties": {
                "ListItemEntityTypeFullName": {
                    "type": "string"
                },
                "Title": {
                    "type": "string"
                },
                "Id": {
                    "type": "string"
                }
            }
        }
    }
}

リストの特定リストアイテム内容取得

リストの特定リストアイテム内容取得
https://[サイトアドレス]/_api/web/GetList('[サイトコレクションの相対パス]/Lists/[リスト内部名]')/Items([ID])
or
https://[サイトアドレス]/_api/web/lists/getbytitle('[リスト表示名]')/Items([ID])

*両方とも、後ろの([ID])を取れば全アイテム情報取得になる。

POSTメソッド(アイテムの更新など)でリストアイテム内容取得&更新する時

POSTメソッドでリストアイテム内容取得&更新
https://[サイトアドレス]/_api/web/GetList('[サイトコレクションの相対パス]/Lists/[リスト内部名]')/GetItems([ID])

1つ上のと似ているが、GETメソッドの時にGetItems使うと怒られるので、POSTなどの時に使ってください。

ドキュメントライブラリ内容の取得

ドキュメントライブラリのフォルダ内容取得

ドキュメントライブラリのフォルダ内容取得
https://[サイトアドレス]/_api/web/GetFolderByServerRelativeUrl('[フォルダ名]')

MSの公式:REST を使用してフォルダーとファイルを操作する には下記のとおり書いてあるが、
この通りに打つとエラー吐くので、/Shared Documentsの前のスラッシュはとること。

url: http://site url/_api/web/GetFolderByServerRelativeUrl('/Shared Documents')
method: GET
headers:
Authorization: "Bearer " + accessToken
accept: "application/json;odata=verbose" or "application/atom+xml"

ドキュメントライブラリのフォルダ内ファイル内容全取得

ドキュメントライブラリのフォルダ内ファイル内容全取得
https://[サイトアドレス]/_api/web/GetFolderByServerRelativeUrl('[フォルダ名]')/Files

ドキュメントライブラリのフォルダ内の特定ファイル取得(IDを指定)

ドキュメントライブラリのフォルダ内の特定ファイル取得(IDを指定)
https://[サイトアドレス]/_api/web/GetFolderByServerRelativeUrl('[フォルダ名]')/Files([ID])

関連リンク

MS公式:REST を使用してリストとリスト アイテムを操作する
Qiita:SharePoint REST サンプル集(@HiroakiOikawaさん)
Qiita:Microsoft Flow で SharePoint のリストアイテムを HTTP要求(REST)で更新する(@chimimouryouさん)

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17