Jstore API Documentation

Jstore - JSON Hosting API

Jstore は JSON を保存し、そのまま URL 経由で取得できるシンプルな API です。 公開データに加えて、アクセスキー付きの protected モードにも対応しています。

Base URL https://jstore.ulab.workers.dev
Content-Type application/json
想定用途 公開用 JSON / 保護付き JSON / 設定配信
認証 更新・削除は X-Edit-Key / protected取得は X-Access-Key

概要

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

向いている用途

  • アプリやWebサイトの設定 JSON
  • 機種一覧やマスターデータ
  • たまに更新する公開データ
  • 限定共有したい protected JSON

向いていない用途

  • 高頻度な書き込みや同時更新
  • 個人情報や認証情報の保存
  • 秘匿性が必要な機密データ
  • 複雑な検索や大量ユーザーデータ管理
Jstore は公開向け JSON ホスティングを基本としつつ、ヘッダー指定で protected モードを選べます。

共通仕様

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

Visibility モード

public

デフォルトの保存モードです。追加ヘッダーなしで保存されます。

  • GET / HEAD でそのまま取得可能
  • visibility: "public" を保存
  • accessKey は発行されません

protected

X-Jstore-Visibility: protected を付けて保存すると有効になります。

  • GET / HEAD に X-Access-Key が必要
  • visibility: "protected" を保存
  • accessKey が発行されます
protected モードでは、作成時レスポンスでのみ accessKey を取得できます。後から復元はできません。

エンドポイント

ROOT /

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

GET /api

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

レスポンス例
{
  "name": "Jstore",
  "status": "ok",
  "endpoints": {
    "create": "POST /api/json",
    "apiGet": "GET /api/json/:id",
    "rawGet": "GET /get/:id",
    "headApi": "HEAD /api/json/:id",
    "headRaw": "HEAD /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
X-Jstore-Visibility protected を指定した場合のみ protected モードで保存
public 保存の例
{
  "hello": "world",
  "items": [1, 2, 3]
}
public レスポンス例
{
  "id": "xa41fz8b",
  "editKey": "550e8400-e29b-41d4-a716-446655440000-a1b2c3",
  "visibility": "public",
  "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"
}
protected レスポンス例
{
  "id": "kp92mn4q",
  "editKey": "550e8400-e29b-41d4-a716-446655440000-a1b2c3",
  "accessKey": "660e8400-e29b-41d4-a716-446655440000-z9x8y7",
  "visibility": "protected",
  "rawUrl": "https://jstore.ulab.workers.dev/get/kp92mn4q",
  "apiUrl": "https://jstore.ulab.workers.dev/api/json/kp92mn4q",
  "size": 49,
  "createdAt": "2026-03-22T12:00:00Z",
  "updatedAt": "2026-03-22T12:00:00Z",
  "type": "object"
}
JSON を新規保存した時点で、利用者は利用規約およびプライバシーポリシーに同意したものとみなされます。 editKeyaccessKey はこのレスポンスでのみ取得できます。
GET /get/{id}

保存済み JSON をそのまま返します。public ならそのまま取得でき、protected なら X-Access-Key が必要です。

パスパラメータ
id 保存時に発行された JSON ID
protected 取得ヘッダー
X-Access-Key protected データ取得時に必須
レスポンス例
{
  "hello": "world",
  "items": [1, 2, 3]
}
主なレスポンスヘッダー例
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-Revision: 1
X-Jstore-Id: xa41fz8b
HEAD /get/{id}

body なしでメタ情報ヘッダーのみ取得します。protected の場合は X-Access-Key が必要です。

レスポンスヘッダー例
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-Revision: 3
X-Jstore-Id: xa41fz8b
GET /api/json/{id}

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

HEAD /api/json/{id}

/get/{id} の HEAD と同様に、body なしでメタ情報ヘッダーのみ取得できます。

PATCH /api/json/{id}

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

リクエストヘッダー
Content-Type application/json
X-Edit-Key 必須。作成時に発行された編集キー
レスポンス例
{
  "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"
}

使用例

1. public JSON を保存
curl -X POST https://jstore.ulab.workers.dev/api/json \
  -H "Content-Type: application/json" \
  -d '{"hello":"world","items":[1,2,3]}'
2. public JSON を取得
curl https://jstore.ulab.workers.dev/get/xa41fz8b
3. protected JSON を保存
curl -X POST https://jstore.ulab.workers.dev/api/json \
  -H "Content-Type: application/json" \
  -H "X-Jstore-Visibility: protected" \
  -d '{"hello":"secret"}'
4. protected JSON を取得
curl https://jstore.ulab.workers.dev/get/kp92mn4q \
  -H "X-Access-Key: <accessKey>"
5. protected JSON を HEAD で確認
curl -I https://jstore.ulab.workers.dev/get/kp92mn4q \
  -H "X-Access-Key: <accessKey>"
6. JSON を更新
curl -X PATCH https://jstore.ulab.workers.dev/api/json/xa41fz8b \
  -H "Content-Type: application/json" \
  -H "X-Edit-Key: <editKey>" \
  -d '{"hello":"updated"}'
protected モードでは、閲覧用の accessKey と更新用の editKey を分けて管理できます。

エラー仕様

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

{
  "error": "invalid_json",
  "message": "Body must be valid JSON"
}
主なステータスコード
400 Bad Request empty_body / invalid_json / missing_access_key / invalid_access_key
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
accessKey エラー例
{
  "error": "missing_access_key",
  "message": "X-Access-Key header is required"
}

利用上の注意

重要事項

  • 保存されたデータは public または protected として扱われます
  • 個人情報、認証情報、機密情報は保存しないでください
  • accessKey / editKey は利用者自身で安全に管理してください
  • データの永続保存は保証されません

免責

  • データ消失・破損・漏洩の可能性があります
  • 当サービスは保存データの完全性や可用性を保証しません
  • 利用により生じた損害について責任を負いません
  • 必要に応じてサービス仕様は変更されることがあります
Jstore は「安全な秘密保管庫」ではありません。protected モードでも、取り扱うデータは慎重に選んでください。