Day75 :) RestAPI


API

  • Application Programming Interface
  • アプリケーションとオペレーティングシステム(またはプログラミング言語が提供する機能)との間のインタラクションサポート
  • Rest


  • Rest: Representational State Transfer
  • ソフトウェアアーキテクチャスタイル
  • Web使用の制約を定義する
  • 名で区切られたすべてのリソースのステータス、
  • コンポーネント

    GET /students/hong
    Response 
    {
        "name": "홍길동",
        "age": 30,
        "gender": "male"
    }
  • リソース:HTTP URLによるリソースの区分/宣言
  • /students/hong
  • 動作:クライアントはHTTPメソッド(post,get,put,delete)を介してcrudをリソースに適用する
  • GET
  • 表現:クライアント要求を受信すると、リソースの状態を表す
  • JSON
  • 特長


    Uniform

  • HTTP規格は、特定の言語や技術に依存するものではなく、すべてのプラットフォーム
  • に使用することができる.

    Stateless

  • 操作でない状態情報(セッションまたはCookie情報)の格納/管理
  • データの送受信は、
  • で終了する必要がある.

    Cacheable

  • HTTP規格を採用し、キャッシュを適用できる
  • キャッシュ:
  • Webページ、画像などのドキュメントを一時的に格納し、サーバの遅延を低減
  • 大量要求を効率的に処理する
  • .

    Self-descriptiveness

  • はメッセージを要求するが、レポートは理解可能な自己表現構造
  • である.

    Client-Server

  • リソースを持つサーバで、リソースを要求するクライアント
  • に構成されています.
  • サーバとクライアントの役割が完全に分離され、相互依存性が減少する
  • 階層構造

  • サーバは、柔軟な構造で
  • を開発するために複数のレイヤを追加することができる.

    REST API

  • REST特性に基づいて実現されるAPI
  • RESTful API

  • REST規則に従って設計されたAPI
  • REST API設計規則


    名詞と小文字を使う

    http://example/getSample(X)
    http://example/Sample(X)
    http://example/sample(O)

    階層関係をスラッシュ(/)で表す

    http://example/students/hong

    URI末尾にスラッシュは含まれません(/)


    下の列()の代わりにハイフン(-)を使用


    レスポンスステータスコードの使用

  • HTTP応答状態コード
    https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
  • URIは拡張子を含まない

    http://example/students/hong.html(X)
    http://example/students/hong(O)
    リファレンス
  • https://reqres.in/
  • RESTful API Webテスト
  • Spring Rest APIの実装


    追加ライブラリ(ジャクソン)


    依存性
  • Jackson Mapperライブラリ(pom.xml)の追加
  • javaからjsonテキストへの相互変換
  • <dependency>
    	<groupId>com.fasterxml.jackson.core</groupId>
    	<artifactId>jackson-databind</artifactId>
    	<version>2.13.1</version>
    </dependency>	

    RestControlの作成

  • は2種類の規格があり、必要に応じて
  • を選択して使用することができる.

    @Controllerの使用

    @Controller
    @ResponseBody
    public class Sample1{
    	로직
    }

    @RequestBody

  • クライアントから要求されたXML/JSONはJavaオブジェクトとして
  • を送信する.

    @ResponseBody

  • JavaオブジェクトをXML/JSONに変換してBodyに送信

    @RestControlの使用

    @RestController
    public class Sample2{
    	로직
    }
  • @Controller+@ResponseBody
  • すべてのメソッドは、ビュー
  • ではなくオブジェクトとして作成されます.