つ・な・が・り・た・いREST APIのお話タピオカLT 2杯目 きり丸(nainaistar)1
View Slide
自己紹介水上皓登:きり丸twitter: @nainaistargithub: hirotoKirimaru通信会社所属2
昔抱いていたRESTの認識3
昔抱いていたRESTの認識❏ Ajax通信をやるために、RESTって技術使えばいいらしい。画面表示後にデータ取ってこれる!画面操作しても再リロードが走らない!だから、UXが向上する!すごいぞ、REST!4
昔抱いていたRESTの認識❏ これは本の管理画面で使うREST APIだから、本の追加は”http://domain/bookManage/insertBook”、本の更新・削除は”http://domain/bookMange/updateBook”、本管理画面RestController.javaだ!5
6
(ちゃんと学んだ)今のRESTの認識7
REST ≒ REST APIRESTの原則に従ったAPIのこと▰ APIが一般的にアクセス可能な状態で提供されている▰ APIのURLはリソースの場所を表現している▰ リソースに対して、HTTPメソッドで取得、更新等の操作ができる(リソースの操作方法が一般化されている)▰ APIの処理結果はステータスコードで判断できる▰ ステートレスで、リクエストごとに独立している8
APIのURLはリソースの場所を表現している9
例)https://api.github.com/users/hirotoKirimaru/https://api.github.com/users/hirotoKirimaru/reposただし、検索に関してはsearchという文言が入ることがあるhttps://api.github.com/search/code?q=readme+user:hirotoKirimaru(※)URLはリソースの場所を表現するので名詞となるのが特徴10
REST APIはリソース指向。http://api.domain/booksSOAP, gRPC等のRPCはサービス指向。サービス名/メソッド名とかになる。http://domain/bookManage/insertBookhttp://domain/bookManage/updateBookURLはリソースの場所を表現するので名詞となるのが特徴11
リソースに対して、HTTPメソッドで取得、更新等の操作ができる(リソースの操作方法が一般化されている)12
リソースに対して、HTTPメソッドで操作ができる13HTTP 機能 CRUDGET 取得 SELECTPOST 更新(登録) UPDATE(INSERT)PUT 登録 INSERTDELETE 削除 DELETEPATCH 更新 UPDATE
❏ APIの処理結果はステータスコードで判断できる❏ APIが一般的にアクセス可能な状態で提供されている14
APIの処理結果はステータスコードで判断できる15HTTP_STATUS 内容100系 情報レスポンス200系 成功300系 リダイレクト400系 クライアントエラー500系 サーバエラー
SOAP(RPC)は?16SOAPの場合、多少のエラーがあっても、ステータスコードは200、BODYにエラー内容を記載していることがある。ステータスコードが200以外のパターンは、リバースプロキシやApacheなどのシステムに繋がらない場合に返却することで、障害を切り分けられるようにしている。HTTPを隠蔽してJava等の言語レイヤーだけで開発できるようにするという思想。(※Real world Http 141p)
ステートレスで、リクエストごとに独立している19
ステートレスで、リクエストごとに独立している20GETメソッドは、常に同じ値を返却する。(リソース更新が入らない限り)PUTメソッドは、常に同じ値を登録し続ける。トランザクションを提供できないので、トランザクションが必要な単位でなるべく細かいAPIにすることが大事。
その他21
REST APIに向いているサービス22
REST APIに向いているサービス23▰ HTTPメソッドで操作しきれないサービス▰ 例) DropboxはRESTからRPCの提供に変更▰ 複数のリソースに対してアクセスするAPI▰ 例) ユーザの投稿、写真、ユーザの友達の写真等々のfacebook, instagram等で試用されているGraphQL。
おわり24
APPENDIX25
26
参考ページ27▰ https://www.w3.org/TR/soap/soapは1.2が最新▰ Restはとくにない?▰ https://github.com/graphql/graphql-js/releasesgraphQLはv14.5.8?▰ https://github.com/grpc/grpc/blob/master/doc/g_stands_for.mdgRPCは1.24が最新_1.25のgは(game)
参考図書28Real world Http