API ContractとREST APIについて ー Spring Certified Professional

Spring Certified Professionalの学習メモ3回目。
今回もまだ「Building a REST API with Spring Boot」受講時のメモです。

ラーニングパスの受講は以下のリンクからできます。(無料)

Building a REST API with Spring Boot


API Contract

ソフトウェアプロバイダーとコンシューマの間で交わされる契約であり、相互作用の方法(どのようなデータを交換するのか、失敗/成功した際にどのように伝えるのか 等)を伝えるためのものである。
REST APIの動作を伝えるために使用されるものであり、やり取りされるコマンド/パラメータ毎にシリアライズ(デシリアライズ)されるデータの詳細について定義する。

ex. Swagger, API Blueprintなど

Jsonについて

JsonJavascript Object Notation
オブジェクトの特定の情報を読みやすく理解しやすい形式で表現するフォーマットのこと。


RESTとCRUDとHTTP

REST:Representational State Transferの略であり、REST APIではリソース(データオブジェクト)の状態を管理することを目的としている。

CRUD:「Create(作成)」「Read(読取)」「Update(更新)」「Delete(削除)」の略。
     データストアのオブジェクトに対して実行できる基本操作。

HTTP:Hypertext Transfer Protocolの略。
     呼び出し側がURIにリクエストを送るとWebサーバが受信してリクエストハンドラに渡す。リクエストハンドラはレスポンスを作成して呼び出し側に返却する。
     リクエスト:HTTPメソッド、URI、ボディ
     レスポンス:ステータスコード、ボディ

REST APICRUD操作まとめ

操作 HTTPメソッド レスポンスステータス(成功) リクエストボディ
Create POST 201 必要
Read GET 200 なし
Update PUT 204 必要
Delete DELETE 204 なし

Spring BootでREST

Springのアノテーションコンポーネントスキャン

Springはオブジェクトの設定とインスタンス化を行う。これらのオブジェクトは「Spring Beans」と呼ばれ、通常はSpringによって作成される(一般的にはオブジェクトの作成はnewキーワードが利用されている)。

Springがオブジェクトを作成する方法はいくつかある。例えば、コンポーネントスキャンでインスタンスを作成させたい場合、クラスにアノテーションを付与する必要がある。コンポーネントスキャンはアプリの起動時に行われる。作成されたBeanはSpringのIoCコンテナ(DIコンテナ)に格納され、ここからBeanが必要なコードにインスタンスを注入できる。

Spring Web Controller

Spring Webでは、リクエストはコントローラによって処理される。クラスにアノテーション「@RestController」を付与することでSpringは自動でコントローラだと認識し、Spring Webに注入してルーティングを行う(ルーティングに使われるのはコントローラ内のメソッド達)。

コントローラにはハンドラメソッドを定義することができ、ハンドラメソッドはそのメソッドが対象としているリクエストをアプリケーションが受け取ったときにコールされる。なお、どのリクエストを対象とするのか?についてはメソッドに付与するアノテーションで定義する。
ex. @GetMapping:GETメソッドが対象。属性でパスを指定する。
パスパラメータで指定している値をハンドラメソッドの処理の中でも使用したい場合、引数に「@PathVariable」を付与する。また、この時にパスパラメータ名と引数名を合わせる必要がある。

@GetMapping("/cashcards/{requestId}")
private CashCard findById(@PathVariable Long requestId) {
}

レスポンスをステータスコード込みで返却するために、Spring Webは「ResponseEntity」というクラスを提供している。このクラスを使用することで、処理結果に応じて任意のステータス、レスポンスボディを返却することができる。