成分 / Seibun

Get Started

最初の 1 リクエストまで

サインアップして API キーを発行し、八訂準拠の食品データを叩くまでを なぞります。各ステップに cURL / JavaScript / Python のコピペ例が あります。

例のベース URL は http://localhost:8787pnpm dev のローカル)です。本番では、デプロイした成分 API のベース URL に 置き換えてください。

サインアップ

メール+パスワードでアカウントを作成します。 メール検証は無効なので、サインアップ成功で即ログイン状態になります(成功応答の Set-Cookie がセッション)。次の キー発行で使うので、Cookie を必ず保存してください。
# -c でセッション Cookie を cookies.txt に保存(次のキー発行で使う)
curl -i -c cookies.txt -X POST http://localhost:8787/api/auth/sign-up/email \
  -H 'content-type: application/json' \
  -d '{"email":"me@example.com","password":"password1234","name":"me"}'

API キーを発行

ログイン状態(セッション Cookie)で POST /v1/keys を叩くとキーを発行できます。 平文キー(key)は発行時の応答に 1 度だけ含まれます。サーバは SHA-256 ハッシュしか保存しないため、 控え忘れた場合は失効させて再発行してください。
# -b で保存済み Cookie を送信。応答の "key"(平文)は**この 1 度だけ**返る。
curl -X POST http://localhost:8787/v1/keys -b cookies.txt \
  -H 'content-type: application/json' \
  -d '{"name":"my first key"}'
#  → {"id":"...","name":"my first key","keyPrefix":"fnk_xxxx","tier":"free","key":"fnk_<平文>"}

最初のリクエスト

発行したキーを X-API-Key ヘッダに付けて、データルートを叩きます。栄養値は種別(kind)を保持していて、測定値は { kind, value, unit }、微量・未測定は値を持たず{ kind, unit } で返ります。
# 発行したキーを X-API-Key ヘッダに付けてデータルートを叩く。
curl "http://localhost:8787/v1/foods/01001" \
  -H "X-API-Key: fnk_xxxxxxxxxxxxxxxx"

応答(抜粋・GET /v1/foods/01001・既定の core):

{
  "foodNumber": "01001",
  "name": "アマランサス 玄穀",
  "groupId": "01",
  "nutrients": {
    "energy_kcal":  { "kind": "measured", "value": 343, "unit": "kcal" },
    "protein":      { "kind": "measured", "value": 12.7, "unit": "g" },
    "fat":          { "kind": "measured", "value": 6, "unit": "g" },
    "dietaryFiber": { "kind": "measured", "value": 7.4, "unit": "g" },
    "carbohydrate": { "kind": "measured", "value": 64.9, "unit": "g" },
    "salt":         { "kind": "measured", "value": 0, "unit": "g" }
  },
  "portions": []
}

kind は種別を保持します(数値に潰しません)。値を持つ 種別と持たない種別があります:

// 測定値(value あり)
{ "kind": "measured", "value": 7.4, "unit": "g" }
// 推定値(括弧付き)も value あり
{ "kind": "estimated", "value": 11.3, "unit": "g" }
// 微量 Tr は value を持たない
{ "kind": "trace", "unit": "mg" }
// 未測定(- または空欄)も value なし
{ "kind": "notMeasured", "unit": "µg" }

お試しトークン(認証なしで試す)

アカウントを作らずに試したいときは、お試しトークンが使えます。POST /v1/trial-token に Turnstile の ウィジェットトークンを渡すと短命トークン(24 時間/生涯 30 リクエスト)が返るので、Authorization: Bearer で渡します。※ Turnstile のフロント側ウィジェットは今後対応予定です。 現在は取得済みのウィジェットトークンを差し込んでお試しください。
# 1) Turnstile を 1 回解いて得たウィジェットトークンを渡し、短命トークンを得る。
curl -X POST http://localhost:8787/v1/trial-token \
  -H 'content-type: application/json' \
  -d '{"turnstileToken":"<widget token>"}'
#  → {"token":"<payload>.<sig>","expiresAt":"..."}

# 2) 得たトークンを Authorization: Bearer で渡してデータルートを叩く。
curl "http://localhost:8787/v1/foods?q=アマ&limit=5" \
  -H 'Authorization: Bearer <payload>.<sig>'

これで使えます!

サインアップからキー発行、最初のリクエストまで一通り完了です。あとは 栄養素ティアやポーション、レート制限まわりを押さえれば本番に乗せられます。