RESTfull APIとは?


REST APIとは?


RESTは,Representation State Transferという用語の略であり,Webの利点を最大限に利用するために生じたネットワークアーキテクチャの原理の集合である.ここで、「ネットワークアーキテクチャの原理」とは、リソースを定義し、リソースにアドレスを指定する方法の全体を指す.
RESTとは
1.HTTP URIでリソースを指定します.
2.HTTP方法(POST、GET、PUT、DELETE)によりリソースにCRUDを適用する.
CRUDは、ほとんどのコンピュータソフトウェアが有する基本的なデータ処理機能、すなわち、CRUDの作成、読み取り、更新、削除であり、RESTには以下のものが含まれる.
  • 作成:データ生成(POST)
  • Read:GET
  • 更新:データ修正(PUT)
  • Delete:データ消去(DELETE)
  • RESTは、以下のような制約条件(特徴)を有し、これらすべての制約条件が遵守される形式をREST「-ful」と表す.

    RESTアーキテクチャに適用される6つの制限条件


    1. Uniform Interface

  • わかりやすいように、一致したインターフェースで区切らなければなりません.
  • 4種類の制約
  • Identification Of Resources
  • リソースは一意に識別する必要があるので、URIとHTTPメソッドを使用して動作を区別する.
  • Manipulation of Resources through Representation
  • HTTPメソッドを使用して動作を表現します.
  • Self - Descriptive Messages
  • 要求/応答メッセージは、自分がどのような動作をしているかを示すべきである.
  • 要求メッセージは、HTTPメソッドを使用してどのような動作を行うかを説明することができる.
  • 応答メッセージは、HTTP Status Code、Headerを使用して応答中の状態および応答を記述する.
  • Hypermedia As The Engine Of Application State (HATEOAS)
    これは、
  • ハイパーリンクを使用してアプリケーションのステータスを移行することを意味します.
  • リソース要求に対する応答と同時に次の動作に対するURIを返すことにより、URIの変更を要求する際に、クライアントにコードを変更させず、サーバで動的に生成されたURIを使用してクライアントコードを変更する必要もない.
  • 200 OK 
    {
        "id" : "1", 
        "name" : "zayson", 
        "links" : {
            "grade" : "/members/1/grade",     // 등급을 수정하는 ACTION URI 전달
            "exp" : "/members/1/exp"          // 경험치를 수정하는 ACITON URI 전달
        }
    }

    2. Stateless

  • クライアントからサーバへの各リクエストには、リクエストを理解するために必要なすべての情報が含まれている必要があります.
  • 個の要求の間で、クライアントのコンテキストはサーバに格納されてはならない.したがって、セッション内の情報はクライアントが完全に所有する必要があります.
  • 例えば、
  • は、登録されたセッションを維持する必要がある場合、この情報もクライアントによってサーバに携帯され、転送されなければならない.(ex.JWTを使用)
  • 3. Cacheable

  • HTTPはキャッシュ機能を有する.
  • サーバが応答するリソースをキャッシュすることにより、以降のRESTサーバ上で同じ要求の前にキャッシュを検証することができ、RESTサーバのトランザクション量を低減し、リソースへの応答時間を低減することができる.
  • 4. Layered System


    クライアントは通常、ターゲット・サーバに直接接続するか、中間サーバで接続するか分かりません.中間サーバは、システム規模の拡張性を向上させるために、ロード・バランシングまたは共有キャッシュ機能を提供します.

    5. optional


    Javaウィジェットまたはjavascriptの提供により、サーバはクライアントが実行できる論理を転送して機能を拡張することができます.

    6. Client-Server


    アーキテクチャを簡素化し、分割(デカップリング)することで、クライアント・サーバの各セクションが独立して改善されます.

    リファレンス


    https://meetup.toast.com/posts/92
    https://ko.wikipedia.org/wiki/REST
    https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
    https://sabarada.tistory.com/26