# JSDB V1とV2の相違点

#### 1. **エンドポイント URL**

* **1つ目**: `https://events-front.mixeder.net/v2/jsdb`
* **2つ目**: `https://events-front.mixeder.net/v2/jsdbv2`

#### 2. **HTTPメソッド**

* **1つ目**: `GET` のみでリクエスト
* **2つ目**: `GET` と `POST` の両方をサポート（アクションによって使い分け）

#### 3. **データ管理方法**

* **1つ目**: データのIDを手動で指定（更新・削除時に指定）
* **2つ目**: 自動的に連番のIDが付与される（追加時）

#### 4. **パラメータ**

* **1つ目**: `action`, `key`, `id`, `data` の4つのパラメータ
* **2つ目**: `action`, `key`, `id`, `data` の4つのパラメータだが、`POST` メソッドでも使用可能。`data` と `id` が条件付きで使用。

#### 5. **レスポンス**

* **1つ目**: レスポンスは基本的にJSON形式で全データ、または特定のIDを返却
* **2つ目**: レスポンスはJSON形式だが、全データ取得時は `{ "ID": { ... } }` 形式で、特定のID取得時はそのデータの内容のみを返す

#### 6. **エラーレスポンス**

* **1つ目**: `Key parameter is missing` や `Invalid URL` など
* **2つ目**: 400や404ステータスコードで、具体的なエラーメッセージ（例: `Invalid action specified`, `Key parameter is missing`）

#### 7. **アクションのデフォルト**

* **1つ目**: `action=read` がデフォルト
* **2つ目**: `action=read` がデフォルトだが、`GET` でのリクエストも `POST` でのリクエストも可能

#### 8. **データの保存**

* **1つ目**: 指定された `key` に対応するJSONファイルにデータを保存
* **2つ目**: 指定された `key` に対応するJSONファイルにデータを保存。データが存在しない場合、新しい空のファイルが自動で作成される

#### 9. **レスポンス例**

* **1つ目**: レスポンスが直接的に成功メッセージ（例: `{ "success": "Data added successfully." }`）
* **2つ目**: レスポンスにID情報が含まれることがあり、追加時の成功レスポンスにID（例: `{ "success": "Data added successfully.", "id": 3 }`）

### **APIの違い（表形式）**

| 項目           | jsdb                            | jsdbv2                              |
| ------------ | ------------------------------- | ----------------------------------- |
| **エンドポイント**  | `/v2/jsdb`                      | `/v2/jsdbv2`                        |
| **対応メソッド**   | GET のみ                          | GET / POST 両方対応                     |
| **データの追加**   | IDを手動で指定                        | IDが自動で連番管理される                       |
| **レスポンス形式**  | 配列 `[ {id: 1, name: "Alice"} ]` | オブジェクト `{ "1": { name: "Alice" } }` |
| **エラー処理**    | 文字列メッセージのみ                      | HTTPステータスコード+詳細なエラーJSON             |
| **データがない場合** | `{"error": "Data not found."}`  | 空のJSONファイルが自動作成される                  |

#### `jsdb` と `jsdbv2` の違いと特徴

現在、`https://events-front.mixeder.net/v2/` では **`jsdb`** と **`jsdbv2`** という2つのJSONデータ管理APIが提供されています。\
この2つのAPIは基本的な目的は同じですが、仕様やデータの管理方法に違いがあります。\
ここでは、それぞれのAPIの違いを詳しく説明します。

***

### **1. エンドポイントの違い**

APIのベースURLは同じですが、アクセスするエンドポイントが異なります。

* **`jsdb`** → `https://events-front.mixeder.net/v2/jsdb`
* **`jsdbv2`** → `https://events-front.mixeder.net/v2/jsdbv2`

**`jsdbv2` は `jsdb` の改良版** であり、新しい機能やより柔軟なデータ管理が可能になっています。

***

### **2. リクエスト方法の違い**

* **`jsdb`** は **GETメソッドのみ対応** しており、データの取得専用です。
* **`jsdbv2`** は **GETとPOSTの両方** に対応しており、新しいデータの追加が可能です。

`jsdb` ではデータの追加や更新ができないため、データを変更したい場合は別の方法が必要になります。\
一方、`jsdbv2` では **POSTリクエストを使用することで、データを新規追加することができます。**

***

### **3. データ管理の違い**

#### **jsdb の場合**

データを取得する際には **データIDを明示的に指定** する必要があります。\
例えば、特定のIDのデータを取得する場合は、以下のようなリクエストになります。

```
bashコピーする編集するGET /v2/jsdb?id=1
```

#### **jsdbv2 の場合**

データを追加すると、**IDが自動的に付与** されます。\
IDは1からの連番になり、ユーザーが手動で指定する必要はありません。\
これはデータの一貫性を保つのに役立ちます。

***

### **4. レスポンス形式の違い**

#### **jsdb のレスポンス**

`jsdb` のデータ取得時のレスポンスは **配列形式** になっています。\
例えば、ID 1 のデータを取得すると、以下のようなレスポンスが返されます。

```json
jsonコピーする編集する[
  { "id": 1, "name": "Alice" }
]
```

#### **jsdbv2 のレスポンス**

`jsdbv2` のレスポンスは **オブジェクト形式** になっており、IDがキーとして扱われます。\
例えば、データを取得すると以下のようなレスポンスになります。

```json
jsonコピーする編集する{
  "1": { "name": "Alice" }
}
```

この形式では、データを簡単に検索・管理しやすくなります。

***

### **5. エラーハンドリングの違い**

#### **jsdb のエラーハンドリング**

`jsdb` はエラーが発生した際、シンプルな文字列メッセージを返します。\
例えば、データが存在しない場合、以下のようなレスポンスになります。

```json
jsonコピーする編集する{ "error": "Data not found." }
```

#### **jsdbv2 のエラーハンドリング**

`jsdbv2` は **HTTPステータスコード** と **詳細なエラーメッセージ** を返します。\
例えば、リクエストが不正だった場合、以下のようなレスポンスが返されます。

```json
jsonコピーする編集する{
  "status": 400,
  "message": "Invalid request."
}
```

この違いにより、`jsdbv2` の方がエラー処理がしやすく、APIの利用時にトラブルが発生した際に原因を特定しやすくなっています。

***

### **6. データが存在しない場合の挙動の違い**

* **`jsdb`** では、データが存在しない場合に `"error": "Data not found."` のエラーメッセージを返します。
* **`jsdbv2`** では、データが存在しない場合でも空のJSONオブジェクト `{}` が返され、新しいデータが追加される際に自動的にJSONファイルが作成されます。

### **まとめ**

**`jsdbv2` は `jsdb` の改良版** であり、以下のような利点があります。\
✅ **データの追加が簡単に可能（POST対応）**\
✅ **IDが自動管理される（手動指定不要）**\
✅ **エラーハンドリングが詳細化**\
✅ **データのレスポンスがオブジェクト形式で扱いやすい**

一方で、**シンプルなデータ取得のみが必要な場合は、`jsdb` でも十分に利用できます。**\
どちらのAPIを使用するかは、プロジェクトの要件に応じて選択するとよいでしょう。
