Jstore API Documentation

Jstore - JSON Hosting API

Jstore は JSON を保存し、そのまま URL 経由で取得できるシンプルな API です。 設定ファイル、マスターデータ、更新頻度の低い公開 JSON の配信に向いています。

Base URL https://jstore.ulab.workers.dev
Content-Type application/json
想定用途 公開用 JSON / 設定配信 / 低頻度更新データ
認証 取得不要 / 更新・削除は X-Edit-Key

概要

Jstore は「JSON を保存して、そのまま返す」ことに特化したシンプルなサービスです。 サーバー側で JSON の意味や構造を解釈せず、保存された内容をそのまま配信します。

向いている用途

  • アプリやWebサイトの設定JSON
  • 機種一覧やマスターデータ
  • たまに更新する公開データ
  • 小規模なJSON配信API

向いていない用途

  • 高頻度な書き込みや同時更新
  • 個人情報や認証情報の保存
  • 秘匿性が必要な機密データ
  • 複雑な検索や大量ユーザーデータ管理
Jstore は公開向け JSON ホスティングです。読み取りはシンプルに、更新・削除は editKey で管理します。

共通仕様

保存形式 JSON のみ
リクエスト Content-Type application/json
レスポンス形式 取得系は保存された JSON をそのまま返却。作成・更新・削除系はメタ情報 JSON を返却。
公開範囲 URL を知っていれば取得可能な公開データ
更新・削除認証 X-Edit-Key ヘッダー必須
サイズ制限 10MB
editKey 保存方式 平文は返却のみ。保存時は SHA-256 ハッシュ化
Jstore は JSON の中身を解釈しません。通常の JSON でも、暗号化済み文字列を含む JSON でも、JSON として有効なら保存できます。

エンドポイント

ROOT /

ドキュメントへリダイレクトします。

GET /api

API の状態確認用エンドポイントです。利用可能な基本情報を JSON で返します。

レスポンス例
{
  "name": "Jstore",
  "status": "ok",
  "endpoints": {
    "docs": "GET /",
    "info": "GET /api",
    "create": "POST /api/json",
    "apiGet": "GET /api/json/:id",
    "rawGet": "GET /get/:id",
    "update": "PATCH /api/json/:id",
    "remove": "DELETE /api/json/:id"
  },
  "limits": {
    "maxJsonBytes": 10485760
  }
}
POST /api/json

JSON を新規保存します。保存後、取得用 URL と更新・削除用の editKey を返します。

リクエストヘッダー
Content-Type application/json
リクエスト例
{
  "hello": "world",
  "items": [1, 2, 3],
  "version": 1
}
レスポンス例
{
  "id": "xa41fz8b",
  "editKey": "550e8400-e29b-41d4-a716-446655440000-a1b2c3",
  "rawUrl": "https://jstore.ulab.workers.dev/get/xa41fz8b",
  "apiUrl": "https://jstore.ulab.workers.dev/api/json/xa41fz8b",
  "size": 49,
  "createdAt": "2026-03-22T12:00:00Z",
  "updatedAt": "2026-03-22T12:00:00Z",
  "type": "object"
}
JSON を新規保存した時点で、利用者は利用規約およびプライバシーポリシーに同意したものとみなされます。editKey はこのレスポンスでのみ取得できます。更新・削除に必要なので、必ず安全に保存してください。
GET /get/{id}

保存済み JSON をそのまま返します。公開用 URL として利用できるシンプルな取得エンドポイントです。

パスパラメータ
id 保存時に発行された JSON ID
レスポンス例
{
  "hello": "world",
  "items": [1, 2, 3],
  "version": 1
}
主なレスポンスヘッダー例
Content-Type: application/json; charset=utf-8
Cache-Control: public, max-age=86400
X-JSON-Size: 49
X-Created-At: 2026-03-22T12:00:00Z
X-Updated-At: 2026-03-22T12:00:00Z
X-JSON-Type: object
X-Jstore-Id: xa41fz8b
GET /api/json/{id}

/get/{id} と同様に JSON を取得します。API パスに統一したい場合に利用できます。

レスポンス例
{
  "hello": "world",
  "items": [1, 2, 3],
  "version": 1
}
PATCH /api/json/{id}

既存 JSON を上書き更新します。対象 JSON の X-Edit-Key が必要です。

リクエストヘッダー
Content-Type application/json
X-Edit-Key 必須。作成時に発行された編集キー
リクエスト例
{
  "hello": "updated",
  "items": [1, 2, 3, 4],
  "version": 2
}
レスポンス例
{
  "message": "JSON updated successfully",
  "id": "xa41fz8b",
  "rawUrl": "https://jstore.ulab.workers.dev/get/xa41fz8b",
  "apiUrl": "https://jstore.ulab.workers.dev/api/json/xa41fz8b",
  "size": 57,
  "createdAt": "2026-03-22T12:00:00Z",
  "updatedAt": "2026-03-22T13:00:00Z",
  "type": "object"
}
DELETE /api/json/{id}

既存 JSON を削除します。対象 JSON の X-Edit-Key が必要です。

リクエストヘッダー
X-Edit-Key 必須。作成時に発行された編集キー
レスポンス例
{
  "message": "JSON deleted successfully",
  "id": "xa41fz8b"
}

使用例

動作確認用の curl 例です。そのまま使えます。

1. JSON を保存
curl -X POST https://jstore.ulab.workers.dev/api/json \
  -H "Content-Type: application/json" \
  -d '{"hello":"world","items":[1,2,3]}'
2. JSON を取得
curl https://jstore.ulab.workers.dev/get/xa41fz8b
3. JSON を更新
curl -X PATCH https://jstore.ulab.workers.dev/api/json/xa41fz8b \
  -H "Content-Type: application/json" \
  -H "X-Edit-Key: 550e8400-e29b-41d4-a716-446655440000-a1b2c3" \
  -d '{"hello":"updated"}'
4. JSON を削除
curl -X DELETE https://jstore.ulab.workers.dev/api/json/xa41fz8b \
  -H "X-Edit-Key: 550e8400-e29b-41d4-a716-446655440000-a1b2c3"
更新頻度が低いデータ配信なら、Jstore はかなり扱いやすい構成です。設定 JSON や一覧データの公開に向いています。

エラー仕様

エラー時は基本的に以下の形式で返します。

{
  "error": "invalid_json",
  "message": "Body must be valid JSON"
}
主なステータスコード
400 Bad Request empty_body または invalid_json
401 Unauthorized missing_edit_key
403 Forbidden invalid_edit_key
404 Not Found not_found
405 Method Not Allowed method_not_allowed
413 Payload Too Large payload_too_large
415 Unsupported Media Type unsupported_media_type

セキュリティに関するヒント

Jstore は公開用途を想定したサービスです。機密性が必要なデータは保存しないでください。 ただし、必要に応じてクライアント側で暗号化した JSON を保存することは可能です。

暗号化済み JSON の例
{
  "encrypted": true,
  "algorithm": "AES-GCM",
  "data": "base64-encoded-ciphertext",
  "note": "client-side encrypted"
}
Jstore は暗号化・復号機能を提供しません。鍵管理や暗号方式の選定は、利用者自身の責任で行ってください。

利用上の注意

重要事項

  • 保存されたデータは公開される可能性があります
  • 個人情報、認証情報、機密情報は保存しないでください
  • データの利用・公開はユーザー自身の責任で行ってください
  • データの永続保存は保証されません

免責

  • データ消失・破損・漏洩の可能性があります
  • 当サービスは保存データの完全性や可用性を保証しません
  • 利用により生じた損害について責任を負いません
  • 必要に応じてサービス仕様は変更されることがあります
Jstore は「安全な秘密保管庫」ではなく、「公開向け JSON ホスティング」です。秘匿性が必要な情報は扱わない前提で利用してください。