あるリソースに対して、HTTPのメソッドとCRUD処理を対応させるRESTらしいAPIを実装してみます。
Table of Contents
作り方
Service Studioで、Logic>Integrations>RESTを右クリックして「Expose REST API」。
最初は、ここでリソース名を指定して、その下にCRUDに対応する4種類のメソッドだけを追加しようと思いました。
しかし、そうすると、個別のメソッドのURL Pathを「/」に変える事ができません。デフォルトで有効になっているSwaggerのAPIドキュメントがその位置にあって重複するためです。折角自動で作成されるドキュメントなので、無効にはせず別の方法にしました。
以下、リソース名は、サンプルについてくるContactsとして説明すると、
- 「Expose REST API」で追加するAPIを1リソースでなく、複数リソースからなる一連の機能の塊と考える
- CRUDの4メソッドはその下にGetContactsのように命名して作成
- メソッドの「URL Path」を「/Contacts」に変更
- 「HTTP Method」を追加ならPOST、読み取りならGET、更新ならPUT、削除ならDELETEにする
実装例
API名はとりあえずチュートリアルからPhoneBookとしました。
その下にContactsリソースに対するCRUDを定義してあります。
追加メソッド:CreateContact
入力:Contact(Entity1レコード分)
出力:追加したレコードのContactId(EntityのId)
プロパティ変更点:URL Path→/Contacts、HTTP Method→POST
読み取りメソッド:GetContact
入力:ContactId(EntityのId)
出力:Contact(Entity1レコード分)
プロパティ変更点:URL Path→/Contacts、HTTP Method→GET
更新メソッド:UpdateContact
入力:Contact(Entity1レコード分)
出力:UpdatedContact(更新後のEntity1レコード分)
プロパティ変更点:URL Path→/Contacts、HTTP Method→PUT
削除メソッド:DeleteContact
入力:ContactId(EntityのId)
プロパティ変更点:URL Path→/Contacts、HTTP Method→DELETE
実行例
FiddlerのComposerで実行してみます。
アクセスするURLみんな以下で同じです。
<モジュールのURL>/rest/PhoneBook/Contacts
追加・更新メソッド
ヘッダに「Content-Type: application/json」を追加し、以下の内容をリクエストボディに設定。
{ "Name":"Test User1", "JobTitle":"Sales Representative", "Phone":"000-00000000", "Email":"test@example.com" }
結果として、追加されたレコードのID(184のような形式)が返ってきました。
更新の場合は、更新されたレコード全体が返ってきます。
読み取り・削除メソッド
URL末尾に対象レコードのID(上で返ってきた値)をつけてリクエストします。
?ContactId=184
読み取りの場合は以下のようなJSONが返ってきます。削除はなにも返さないようにしているので、レスポンスボディは空です。
{"Id":184,"Name":"Test User2","JobTitle":"Sales Representative","Phone":"000-00000000","Email":"test@example.com"}