Upgrade to Pro — share decks privately, control downloads, hide ads and more …

つ・な・が・り・た・い REST_APIのお話

kirimaru
October 07, 2019

つ・な・が・り・た・い REST_APIのお話

kirimaru

October 07, 2019
Tweet

More Decks by kirimaru

Other Decks in Programming

Transcript

  1. つ・な・が・り・た・い
    REST APIのお話
    タピオカLT 2杯目 きり丸(nainaistar)
    1

    View Slide

  2. 自己紹介
    水上皓登:きり丸
    twitter: @nainaistar
    github: hirotoKirimaru
    通信会社所属
    2

    View Slide

  3. 昔抱いていたRESTの認識
    3

    View Slide

  4. 昔抱いていたRESTの認識
    ❏ Ajax通信をやるために、RESTって技術使えばいいらしい。
    画面表示後にデータ取ってこれる!
    画面操作しても再リロードが走らない!
    だから、UXが向上する!
    すごいぞ、REST!
    4

    View Slide

  5. 昔抱いていたRESTの認識
    ❏ これは本の管理画面で使うREST APIだから、
    本の追加は
    ”http://domain/bookManage/insertBook”、
    本の更新・削除は
    ”http://domain/bookMange/updateBook”、
    本管理画面RestController.javaだ!
    5

    View Slide

  6. 6

    View Slide

  7. (ちゃんと学んだ)
    今のRESTの認識
    7

    View Slide

  8. REST ≒ REST API
    RESTの原則に従ったAPIのこと
    ▰ APIが一般的にアクセス可能な状態で提供されている
    ▰ APIのURLはリソースの場所を表現している
    ▰ リソースに対して、HTTPメソッドで取得、更新等の操作ができる
    (リソースの操作方法が一般化されている)
    ▰ APIの処理結果はステータスコードで判断できる
    ▰ ステートレスで、リクエストごとに独立している
    8

    View Slide

  9. APIのURLはリソースの場所を
    表現している
    9

    View Slide

  10. 例)
    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

    View Slide

  11. REST APIはリソース指向。
    http://api.domain/books
    SOAP, gRPC等のRPCはサービス指向。
    サービス名/メソッド名とかになる。
    http://domain/bookManage/insertBook
    http://domain/bookManage/updateBook
    URLはリソースの場所を表現するので
    名詞となるのが特徴
    11

    View Slide

  12. リソースに対して、
    HTTPメソッドで取得、更新等の操作ができる
    (リソースの操作方法が一般化されている)
    12

    View Slide

  13. リソースに対して、HTTPメソッド
    で操作ができる
    13
    HTTP 機能 CRUD
    GET 取得 SELECT
    POST 更新(登録) UPDATE(INSERT)
    PUT 登録 INSERT
    DELETE 削除 DELETE
    PATCH 更新 UPDATE

    View Slide

  14. ❏ APIの処理結果は
    ステータスコードで判断できる
    ❏ APIが一般的にアクセス可能な状態で
    提供されている
    14

    View Slide

  15. APIの処理結果は
    ステータスコード
    で判断できる
    15
    HTTP_STATUS 内容
    100系 情報レスポンス
    200系 成功
    300系 リダイレクト
    400系 クライアントエラー
    500系 サーバエラー

    View Slide

  16. SOAP(RPC)は?
    16
    SOAPの場合、多少のエラーがあっても、ステータスコードは200、
    BODYにエラー内容を記載していることがある。
    ステータスコードが200以外のパターンは、
    リバースプロキシやApacheなどのシステムに繋がらない場合に返却することで、障害
    を切り分けられるようにしている。
    HTTPを隠蔽してJava等の言語レイヤーだけで
    開発できるようにするという思想。(※Real world Http 141p)

    View Slide

  17. View Slide

  18. View Slide

  19. ステートレスで、
    リクエストごとに独立している
    19

    View Slide

  20. ステートレスで、
    リクエストごとに
    独立している
    20
    GETメソッドは、常に同じ値を返却する。(リソース更新が入らない限り)
    PUTメソッドは、常に同じ値を登録し続ける。
    トランザクションを提供できないので、
    トランザクションが必要な単位でなるべく細かいAPIにすることが大事。

    View Slide

  21. その他
    21

    View Slide

  22. REST APIに向いているサービス
    22

    View Slide

  23. REST APIに向いている
    サービス
    23
    ▰ HTTPメソッドで操作しきれないサービス
    ▰ 例) DropboxはRESTからRPCの提供に変更
    ▰ 複数のリソースに対してアクセスするAPI
    ▰ 例) ユーザの投稿、写真、ユーザの友達の写真等々の
    facebook, instagram等で試用されているGraphQL。

    View Slide

  24. おわり
    24

    View Slide

  25. APPENDIX
    25

    View Slide

  26. 26

    View Slide

  27. 参考ページ
    27
    ▰ https://www.w3.org/TR/soap/
    soapは1.2が最新
    ▰ Restはとくにない?
    ▰ https://github.com/graphql/graphql-js/releases
    graphQLはv14.5.8?
    ▰ https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md
    gRPCは1.24が最新_1.25のgは(game)

    View Slide

  28. 参考図書
    28
    Real world Http

    View Slide