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

# はじめに
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)で更新する](https://qiita.com/chimimouryou/items/ae191a3767eb779eae72)あたり参考になりますので、組み合わせて使ってください。

# ヘッダ部分
※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"の取り方は後述します）

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

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

### リストの内容取得
```ruby:リストの内容取得
https://[サイトアドレス]/_api/web/GetList('[サイトコレクションの相対パス]/Lists/[リスト内部名]')
or
https://[サイトアドレス]/_api/web/lists/getbytitle('[リスト表示名]')
```
何に使う？⇒リストのGUID"Id"や、リストタイトル"Title"、リストアイテムのエンティティ型名"ListItemEntityTypeFullName"を取得する。
GETメソッドで上記の「リスト内容取得」を使用してHTTPレスポンスを得た後、
「データ操作」⇒「JSONの解析」アクションを選ぶ。
コンテンツに「リスト内容取得」の本文を選び、下記スキーマを記述。

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



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

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

### POSTメソッド（アイテムの更新など）でリストアイテム内容取得＆更新する時
```ruby:POSTメソッドでリストアイテム内容取得＆更新
https://[サイトアドレス]/_api/web/GetList('[サイトコレクションの相対パス]/Lists/[リスト内部名]')/GetItems([ID])

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


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

### ドキュメントライブラリのフォルダ内容取得
```ruby:ドキュメントライブラリのフォルダ内容取得
https://[サイトアドレス]/_api/web/GetFolderByServerRelativeUrl('[フォルダ名]')
```
MSの公式：[REST を使用してフォルダーとファイルを操作する](https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/working-with-folders-and-files-with-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"



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

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

#関連リンク
[MS公式：REST を使用してリストとリスト アイテムを操作する](https://docs.microsoft.com/ja-jp/sharepoint/dev/sp-add-ins/working-with-lists-and-list-items-with-rest "REST を使用してリストとリスト アイテムを操作する")
[Qiita：SharePoint REST サンプル集（@HiroakiOikawaさん）](https://qiita.com/HiroakiOikawa/items/fe41254ec90485297351 "SharePointRESTサンプル集")
[Qiita:Microsoft Flow で SharePoint のリストアイテムを HTTP要求(REST)で更新する（@chimimouryouさん）](https://qiita.com/chimimouryou/items/ae191a3767eb779eae72)