VSCode環境でREST APIを作成してみる

## はじめに
学習用として一つApi環境を作成しておけば何かと便利と思ったので、
SpringでAPIの作成をしていきます。

## 環境
- エディタ：VSCode
- OS:Windows11
- 言語：Java
- フレームワーク：Spring

参照：https://spring.pleiades.io/guides/gs/rest-service/
一応ここに全部書いてるよ！

本記事はバックエンド側での作成となります。
画面からのAPI連携についてはまた今度・・・。

## 手順
### 1. Springプロジェクトを作成する  

1-1. Shift + ctrl + pを押下し、”Spring initializr: Create a Gradle Porject”を選択
    ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/5c51560d-beb1-b349-27a7-6857d3aa1d60.png)


2-2. 下記を選択していきます![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/8b3f3461-3da5-dcc8-f893-394a6eba355a.png)
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/96b4a500-ae17-fc0e-739b-531f5c04ef06.png)
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/e0dd0804-dcc4-c08f-33f9-b6c9f59909e0.png)
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/25351569-fc1f-4781-4099-f752f6178e22.png)
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/dbf854e1-d47f-9ca3-1636-cf9c2492e540.png)
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/c2ef2aad-b680-c9da-8f2e-1176a3c6ac1e.png)


  依存関係は”Spring Web”のみ選択します
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/82681192-8d7d-3542-d630-15c7acb5284f.png)

フォルダを保存する箇所を選択します
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/3e193ab4-62f2-4fdb-617b-4715c938f392.png)

画面右下に構築完了した旨のメッセージが表示されるので、”Open”ボタンを押下する
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/740c6adb-3785-f016-fab2-b056a3605766.png)

環境構築完了です。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/a1381447-5237-643b-67e1-e2489525c036.png)


### 2. ファイルを作成する
下記３つのファイルを作成します

    - コントローラークラス：GreetingController.java
        　→バックエンドのAPI処理窓口みたいなやつです
        
    - 表現クラス（getter/setter)：Greeting.java
        　→入出力する値をこねこねするやつ
        
    - アプリ起動クラス：RestServiceApplication.java
        　→そのままの意味です
        

ファイル配置箇所は”src/main/java/com/example/demo”配下になります

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/f0650111-559e-e2a3-305d-133af35989f1.png)

2-1. コントローラークラス：GreetingController.java

```java
package com.example.demo;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@RestController
public class GreetingController {
    
    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
    
}
```

2-2. 表現クラス（getter/setter)：Greeting.java

```java
package com.example.demo;

public record Greeting(long id, String content) {
}
```

2-3. アプリ起動クラス：RestServiceApplication.java

```java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RestServiceApplication {
    public static void main(String[] args) {
		SpringApplication.run(RestServiceApplication.class, args);
	}
}
```

### 3.ターミナルを起動する
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/c7326930-27c6-27a2-8b5a-fed2f41764ae.png)

### 4.“実行とデバッグ”ボタンを押下する
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/c979a550-4509-172b-6e71-879b592b11a2.png)


ターミナルにこんな感じのロゴが表示されればOKです
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/f83ca610-18b4-62fb-c530-dbcef711265e.png)


### 5.Api結果を確認する

下記へアクセスします

http://localhost:8080/greeting

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194659/60836fab-2151-5625-591a-010145823379.png)


こんな感じの画面が表示されれば成功です

### 終わりに

画面からのApi通信ができるようになると、学習できる範囲が広がるかなと思うので
次回は画面Api通信の構築方法を記事にしたいと思います。