SharePoint Framework での SharePoint REST API 呼び出し (Promise 編)

投稿者: | 2020年9月27日

はじめに

SharePoint Framework にて SharePoint REST API を呼び出す方法について、Promise チェーンを書く際にあまりにも煩雑に感じた部分があったので、その点を解消するための自分なりのやり方をメモしました。

Promise を使った SharePoint REST API 呼び出しのサンプル

GET 処理

概ね以下のようなコードになるかと思います。
ちなみにこの例は、指定のリストの指定のアイテム ID のアイテムについて列を指定してデータを取得するものとなります。

spHttpClient.get メソッドの戻り値である response は REST の URL が違っている場合や呼び出しが失敗した場合については catch に処理が流れますが、SharePoint 内で問題が起きて REST が正しく動作しないような時は、処理は then に流れて、response.ok プロパティが false になります。
そのため、上記コードでは then の中で response.ok プロパティをチェックし false だった場合の処理(失敗時の処理)を入れています。

こうやって見ると、get をするだけでも、結構煩雑なことが分かります。

POST 処理

GET 処理との違いは、POST するデータを spHttpClient.post メソッドの第 3 引数に渡す必要があるところだけで、他は GET と同じです。

戻り値及び Promise の処理の共通化

spHttpClient.get メソッドも spHttpClient.post メソッドも、メソッドを呼び出した後の戻り値の処理と Promise の処理が煩雑です。
この煩雑さを低減したいと考え、以下のように callRestApi というファンクションを作って処理を共通化してみました。

callRestApi ファンクションを利用した GET 処理

callRestApi ファンクションを使うと GET 処理のコードが 9 行削減できます。

callRestApi ファンクションを利用した POST 処理

POST 処理も GET 処理と同様に 9 行コードを削減できます。

まとめ

煩雑な処理を共通化することで、9 行のコードを削減することができました。
1 回の REST API コールであれば大差ありませんが、Promise チェーンを組んで複数の REST API コールをする際にはこの削減効果は大きくなります。
もっと短縮する方法もありそうですが、現在私が書いている書き方を紹介させていただきました。