RESTとは?
- クライアントから、サーバに実施してほしいことをHTTPプロトコルを用いて依頼する ⇨ (例)http://hostname/yattehosiikoto
- 標準的なHTTPリクエストメソッド(GET/POST/PUT/DELETE)を使用して、APIを実装する
- JSONを使用してやりとり ⇨ JavaScript Object Notationの略。
[
{"id" : "1" , "name" : "iphone"},
{"id" : "2" , "name" : "Android"},
]
HTTPリクエストメソッドとは?
HTTPリクエストにはいくつかのメソッドが存在し、以下の4種類のメソッドを利用して、APIの処理を区別するように利用する
- GET・・・ID等によって、対象のデータもしくはリストを取得する
- PUT・・・ID等によって、対象のデータを置き換える、データを更新する
- POST・・・対象のデータをサーバ上に送信する時に使用し、データを登録する
- DELETE・・・ID等によって、対象のデータを削除する
SpringBootとは?
- SpringBootとは、Springアプリケーションを簡単に・迅速に作成する事ができる機能を提供するフレームワーク
Maven
- Javaプログラムをコンパイル・テスト・パッケージ・デプロイを行うツール(類似:Ant、Gradle)
- 使用するJarライブラリ群の依存性を管理
- pom.xmlという設定ファイルに、プロジェクトの情報、ライブラリ、プラグイン等を記述する
<大まかな流れ>
- Mavenがpom.xmlを読み込む
- ローカルリポジトリにダウンロードされる
- ビルドなど、定義されたライフサイクルが実行される
- プラグインが実行される
Javaアノテーション[@]
- JDK1.5から追加された機能『注釈』の意、アノテーション型
- 補足として機能したり、フレームワークに意図を伝える(処理を指示)できる
- フレームワークで用意されたアノテーションを使えるようになる事が重要
- クラスやメソッド、フィールドの名の上に、@アノテーション名 で記述
- アノテーションには引数を渡すことができる
//利用方法(フレームワークが用意されたものを使う)
@AnnotationName(value = "文字列")
public class Sample{
}
Dependency Injection
- 一般的なJavaプログラムでは、あるクラスから他のクラスを呼び出す時には
new(インスタンス化)する必要があり、これを『依存性のある状態』と呼ぶ。 - インスタンスの生成をspring Boot(DIコンテナ)に任せ、インスタンス生成、参照の解決を自動で行ってもらう事を指す。依存性をDIコンテナが管理し、適用してくれる。
- @Autowiredというアノテーションを記述するだけで、SpringBoot管理化にある他のクラスを呼び出す事ができる。
Controller
Controllerとは、リクエストの受付、必要となる業務のロジックを呼び出し連携させる役割を持つ。つまり、アプリケーション全体の制御処理を受け持つ部分を指す。
- クライアントからのリクエストの受付処理
- 入力データの受付処理
- 入力データの検証
- ビジネスロジックの呼び出し
- エラー処理
spring initializrとは?
Spring Initializrは条件に合わせてSpring Bootプロジェクトの雛形を生成するWebサービス。Web UIからプロジェクト設定や利用するSpring Projectを指定することで、簡単にSpring Bootプロジェクトの開発を始めることができる。
- ブラウザを開き、(https://start.spring.io/)を入力し、開く
- 下記を入力し、『GENERATE』ボタンを押す
- Group:
- Artifact:
- Package name:
- Dependencies:
Spring BootでHello World!
ブラウザからHTTP GETを利用してSpringBootに対してリクエストを送り、単純に文字列を返すだけの簡単なAPIを作成する。
作成するControllerクラス
@RestController
public class HelloController {
@GetMapping(value="/")
public String index() {
return "アクセス成功です";
}
@GetMapping(value="/hello")
public String index() {
return "Hello World";
}
@GetMapping(value="/welcom")
public String index() {
return "SpringBootへようこそ";
}
}
- 本アノテーションでSpringBootはControllerクラスとして認識
- メソッドの戻り値が、レスポンスの戻り値となる
- Web API用のControllerで利用する
- HTTP Getリクエスト用のアノテーション
- value 属性にURLのパスを指定する
- 紐づいているメソッドが実行される
実行するポートを変更する
SpringBootは、デフォルトで8080ポートで起動するが、application.propertiesに設定する事で任意のポートに変更できる
server.port=8081
http://localhost:8081 で起動する
① main/java にcontrollerファイルとHelloController.javaを作成する
②controller/HelloController.javaを下記のように編集する
package com.udemy.spring1hello1.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(value="/")
public String index() {
return "アクセス成功です";
}
@GetMapping(value="/hello")
public String hello() {
return "Hello world!";
}
@GetMapping(value="/welcome")
public String welcome() {
return "SpringBootへようこそ!";
}
}
③ Start Debuggingを行い、ローカルホストで確認する
Advanced Rest Clientとは?
Advanced Rest Clientは、制作したAPIの動作テストを行うツールで、APIのURLを指定して実行し、簡単にAPIに対し、データを送信、APIから受信したデータを確認できる。作成するAPIに対して、実行結果を確認する際に使用する。
@Serviceクラスの説明
@Serviceアノテーションを付与したサービスクラスに実装する
■ controllerクラス
リクエストの入口で、必要な業務処理を呼び出す。複雑な処理は基本的には書かない。
■ Serviceクラス
業務処理の元となる箇所。ビジネスロジックはサービスクラスに実装する。
@Autowiredを使う
controllerクラスから、Serviceクラスを呼ぶ時は、@Autowiredアノテーションを使用する。Spring Bootがサービスクラスのインスタンスを自動で注入してくれる。@Service、@Rest Controller等、SpringBoot管理のコンポーネントのインスタンスを取得できる。
@PathVariable
特定の商品番号を取得するケースで、動的にURLに値をしてする仕様を実装する。値の受け取り方として、@PathVariableアノテーションを指定する事で受け取れる。
@GetMappingアノテーションのURLマッピングを指定する箇所には、動的に変わる部分は中括弧で表す。
@RestController
ItemControllerクラス
・・・
@GetMapping("/items/{id}")
public Item getItem(@PathVariable("id")String id){
return itemService.getItem(id);
}
・・・