Web APIとは？REST APIの基礎と実装例

<br>

## ■ はじめに
<br>
Web APIは、異なるシステム間でデータをやり取りするためのインターフェースです。
特にREST API（Representational State Transfer API）は、拡張性の高さから幅広く利用されています。
この記事ではAPIのとはなにかやREST APIの仕組み、実際に簡単なAPIの作成と利用方法を解説します。


## ■ 目次
<br>
1. [APIとは？](#1-apiとは)
2. [REST APIの基本](#2-rest-apiの基本)
3. [REST APIのHTTPメソッド](#3-rest-apiのhttpメソッド)
4. [Spring Bootを使用したREST APIの作成例](#4-spring-bootを使用したrest-apiの作成例)
5. [まとめ](#5-まとめ)


# 1. APIとは
<br>
#### APIの定義
APIは **Application Programming Interface** の略で、ソフトウェア同士がやり取りをするためのインターフェースを意味します。
このAPIを利用することで、異なるシステムやアプリケーション間で情報を簡単に連携することが可能です。

#### APIの利用例
- **Google Maps API** を使って地図情報を表示
- **Twitter API** (※無料プランは2023年2月に廃止) でツイートを自動投稿 
- **OpenWeather API** で天気情報を取得


# 2. REST APIの基本
<br>

### RESTの基本

RESTは、**Representational State Transfer** の略で、シンプルな設計に基づいてWebサービスを構築するアーキテクチャスタイルです。

REST APIには、以下のような特徴があります。

- **ステートレス**: サーバーはクライアントの状態を保存しない。(リクエストごとに独立)
- **リソース指向**: 各APIエンドポイントは、特定のリソース（例：ユーザー、商品）に対応。
- **HTTPメソッド**: GET、POST、PUT、DELETEといったHTTPメソッドを使用。


# 3. REST APIのHTTPメソッド
<br>
REST APIでは、以下のようなHTTPメソッドを使ってリソースに対する操作を行います。

| メソッド | 説明                | 　例               |
|:----------:|:----------------------------:|:----------------------------:|
| GET      | リソースの取得              | ユーザーID 1を取得 (GET) |
| POST     | 新しいリソースの作成        | ユーザーを作成 (CREATE)    |
| PUT      | リソースの更新              | ユーザーID 1を更新 (UPDATE) |
| DELETE   | リソースの削除              | ユーザーID 1を削除 (DELETE) |

HTTPメソッドには上記以外にもPATCHなどもある。

# 4. Spring Bootを使用したREST APIの作成例
<br>

#### 環境セットアップ
Java Development Kit (JDK) をインストール（JDK 17を推奨）
Maven をインストール（Mavenは依存関係管理に使用）

#### プロジェクトの作成
次に、[Spring Initializr](https://start.spring.io/) を使ってプロジェクトを作成します。
手順は以下の通りです。
[Spring Initializr](https://start.spring.io/) にアクセスします。

#### プロジェクトの設定
| プロジェクトの設定 | 設定                       |
|:----------:|:----------------------------:|
|Project|Maven Project|
|Language|Java|
|Spring Boot|最新のバージョンを選択|
|Project Metadata|Group: com.example <br> Artifact: demo|
|Dependencies|Spring Web|

「Generate」をクリックしてプロジェクトをダウンロードします。
ダウンロードしたZIPファイルを解凍し、任意のIDE（例：Eclipse）で開きます。

#### コードの追加
例としてプロジェクト内のsrc/main/java/com/example/demoに移動し、
UserController.javaという新しいファイルを作成し、以下のコードを追加します。

``` java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;

@RestController
public class UserController {

    // ユーザーのリストを返すメソッド
    @GetMapping("/users")
    public List<User> getUsers() {
        return Arrays.asList(
            new User(1, "Test Taro"),
            new User(2, "Test Hanako")
        );
    }
}

// ユーザークラス
class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // idを取得
    public int getId() {
        return id;
    }

    // nameを取得
    public String getName() {
        return name;
    }
}
```

#### アプリケーションの起動

メインメソッドのあるDemoApplication.javaを実行することで、アプリケーションが起動します。

``` java
package com.example.demo;

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

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

#### APIを実行する

アプリケーションを起動したらブラウザまたはPostmanを使って
http://localhost:8080/users にアクセスします。
アクセスが成功すると次のようなJSONデータが返ってくるはずです。

``` json
[
    {"id": 1, "name": "Test Taro"},
    {"id": 2, "name": "Test Hanako"}
]
```

# 5. まとめ
<br>
本記事ではSpring Bootを使ってAPIを作成し、リクエストを送信するところまで作成しました。
Spring Bootは柔軟なフレームワークであり扱いやすいため、ぜひ試してみてください。