[CS]REST APIについて


REST? 👀


RESTは、Representation State Transferの略.
これはHTTPに基づくアーキテクチャであり,クライアントがサーバリソースにアクセスする方法を規定している.すなわち、サーバ上のリソースはURIとしてマークされ、HTTP Methodを使用してリソースの状態が交換される.

RESTのコンポーネント


RESTは、자원행위、および표현の3つの要素から構成される.자원サーバは、一意のIDを持つリソースを有し、クライアントは、これらのリソースに要求を送信する機会を有する.URIの末尾に表示されます.(ex: https://kdt.roto.codes/"todos" )
これは、행위リソースの動作を意味します.HTTP方法は、GET、POST、PUT、PATCH、DELETEを含む.
HTTP要求方法目的GET全て/特定リソースPOST生成PUTリソースの完全置換PATCHリソースの一部修正DELETE全て/特定リソースの削除

使用方法(w.kdt)

const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.send();
これは、표현リソースの動作の具体的な内容を意味する.上記のリンクは、json形式のデータ応答の例として「todos」を提供しています.

RESTの特徴🦾

  • Uniform Interface (일관된 인터페이스)統合インタフェースは、統合リソースリクエストのアーキテクチャスタイルです.これは、クライアントプラットフォーム(android、ios、jsp)の特定の言語または技術に依存しないことを意味する.
  • Stateless (무상태성)RESTは各要求を個別に識別して処理し、前の要求は次の要求に関連付けるべきではない.したがって、セッション情報やCookie情報は使用されず、状態情報を格納管理することができる.(サーバはクライアントの状態(Cookie,細線)などに関心を持たない.
  • Cacheable (캐시가능)HTTP Web規格を使用しているため、キャッシュ機能を適用することができます.(大量のリクエストをすばやく処理できます.)
  • Client-Server Architecture (서버-클라이언트 구조)サーバはAPIを提供し、クライアントはユーザー認証に関連するトランザクションを管理します.要求はクライアントに限られ,応答はサーバに限られるため,相互依存性が減少する.
  • Self-Descriptiveness (자체 표현)RESTリクエスト/レスポンスメッセージは分かりやすい.
  • HTTP POST , http://localhost:8080/board
    {
    	"board":
        		{
            	"title":"제목",
    		"content":"내용"
    		}
    }
  • Layed System (계층화)REST内のサーバは複数の層から構成され、セキュリティ、ロードバランシング、暗号化などの層を追加することによって余構造を変更することができる.
  • REST API / RESTful ? 👻


    RESTベースのルールを遵守し、設計されたAPIをREST APIまたはRESTfulと呼ぶ.

    REST APIの特性

  • 内部システムは、RESTに基づいてシステムを分散させ、拡張性と再利用性を向上させ、メンテナンスと操作を容易にすることもできる.
  • HTTP規格に基づくため、HTTPをサポートするプログラミング言語を用いてクライアント、サーバを実現することができる.(デル派、Java、C#など)
  • REST API設計規則🌈

  • URI는 정보의 자원을 표현해야한다.URIは資源中の動詞ではなく名詞を用いる.また、行為は表現されません.
  • GET/todos/1 => Good👍
    POST/student/phoneNumber => Good👍
    
    GET/getTodos/2 => Nope💦
    DELETE/deleteName/1 => Nope💦
  • 자원에 대한 행위는 HTTP Method로 표현한다.
  • 계층 관계는 / 를 이용해 나타낸다.
  • http://kdt/frontend/b/names
  • URI 마지막은 / 를 사용하면 안된다.
  • 하이픈(-)은 가독성을 높이는데 사용한다.
  • 언더바(_) 혹은 밑줄은 사용하지 않는다.
  • URI 경로에는 소문자가 적합하다.
  • 파일 확장자는 URI에 포함하지 않는다.URIにはメッセージ本体のコンテンツフォーマットを表すファイル拡張子は含まれていません.
  • http://kdt/frontend.html => Node💦

    REST応答コード🌹


    2 xx成功


    200:クライアント要求を正常に実行
    201:クライアントがタスクの作成を要求し、正常に作成されました
    204:リクエストは成功しましたが、応答できるコンテンツはありません.

    3 xx直通


    301:クライアントから要求されたリソースのURIが永続的に変更された場合に使用する
    302:301ですが、一時的に住所を変更する場合に使用します.
    304:このオプションは、以前にアクセスしたリクエストの結果と同じ場合に使用します.キャッシュされたページを保持
    307:一時ページにリダイレクト

    4 xxクライアントエラー


    400:クライアントから無効なリクエスト
    401:ログイン権限なしでページを開く
    403:禁止されているページは、ログインするかどうかにかかわらずアクセスできません
    404:見つからないページ、誤ってアドレスを入力した場合に使用
    408:要求タイムアウト
    409:サーバがリクエストの処理中に競合する
    410:永続的に使用できないページ

    5 xxサーバエラー


    501:要求を処理する機能が作成されていない
    502:可能なリクエストがサーバ間で失われた場合
    503:サーバがクラッシュまたはメンテナンス中
    504:サーバゲートウェイに問題が発生してタイムアウトした場合
    505:HTTPバージョンが異なり、要求が処理できない

    reference 🍑

  • https://mangkyu.tistory.com/46
  • https://velog.io/@stampid/REST-API%EC%99%80-RESTful-API
  • https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html