TIL 7週目REST API





📌 REST API


REST?


4つのHTTPメソッドによりapiを設計する.
rest apiはWebの通信規約HTTPを使用しているので、HTTPメソッドを使用しています.
HTTP URI(Uniform Resource Identifier)によってリソースが識別され、HTTPメソッド(POST、GET、PUT、PATCH、DELETE)によってそのリソースに対してCRUD操作が適用されることを示す.
すなわち、RESTは、リソースインフラストラクチャ(ROA,Resource Oriented Architecture)の設計の中心がリソースであることを意味し、HTTP方式でリソースを処理するように設計されている

REST API


RESTの特性に基づいてAPIを提供する
開発者がHTTPリクエストの送信に使用する方法

RESTful API


RESTfulはRESTの非公式実施ガイドラインである.必ず従わなければならないルールを作成して公表するのではなく、複数の開発者が非公式に意見を出す集合、すなわち開発者ごとに考えているRESTfulの内容が異なる可能性がある.

REST API推奨


1)HTTP通信を行う場合,リソースはURIにより識別される.
2)行動はHTTP法(POST,GET,DELETE,PUT,PATCH)により行われる.
3)結果は応答コード(201403~~)で告知する.
  • リソース:リソースはURIによって表される.
    ex) http://example.com/topics
    URIはその情報の名称を識別するだけであり,その情報を加工できる必要がある.これを方法とする.
  • 方法:GET、POST、DELETE、PUT(全修正)、PATCH(部分修正)
  • 📌 CRUD


    GET


    POST

    const onAddClick = () => {
        fetch("http://localhost:3001/days/", {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            id: Date.now(),
            day: days.length + 1,
          }),
        }).then(res => {
          if (res.ok) {
            alert("저장 완료");
            history.push("/");
          }
        });
      };

    PUT

     const onChange = () => {
        fetch(`http://localhost:3001/words/${word.id}`, {
          method: "PUT",
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            ...word,
            isDone: !isDone,
          }),
        }).then(res => {
          if (res.ok) {
            setIsDone(!isDone);
          }
        });
      };

    Patch


    DELETE

    const onDelClick = () => {
        if (window.confirm("are your sure?")) {
          fetch(`http://localhost:3001/words/${word.id}`, {
            method: "DELETE",
            headers: {
              "Content-Type": "application/json",
            },
          }).then(res => {
            if (res.ok) {
              setWord({
                ...word,
                id: 0,
              });
            }
          });
        }
      };
    
      if (word.id === 0) {
        return null;
      }

    関係


    リソースとリソースの関係.
    topics(부모)/1(부모의 element id)/comments(자식)
    // topics의 1번 인덱스가 comments를 포함한다
    このように表現します.

    📌 ステータスコードステータスコード

  • 100 : informational
  • :100:continue:クライアント要求が正しい場合
    :102:処理:要求の処理中
  • 200 : successful
  • :200:ok:要求されたリソースが成功しました
    :201:created:リクエストの作成に成功したリソース
    :204:no content:要求を実行するリソースですが、コンテンツはありません.
  • 300 : redirection
  • :301:別のurlへの移行を要求
    :302:他の場所への一時的な移行を要求
    :303:getリクエストでのみ使用されます.302と同様です.
    :307:postリクエストのみを一時的に別の場所に移動
    :308:他の場所に永続的に移動
  • 400 : client error
  • :400:エラーリクエスト時
    :401:ログインしていない場合は、認証されていないユーザからのリクエスト
    :403:特定の日付の権限がない場合(ログインしていますが、制限があります)
    :404:urlが存在しない場合
    :405:urlの使用が許可されていない場合
    :409:クライアントが作成するリソースがすでに存在しているか、競合している場合
  • 500 : server error
  • :500:サーバ内部で問題が発生
    :502:中間サーバ応答の問題
    :503:サーバが特定のurlを処理する準備ができていない場合