本文へ移動
Bounty Developer

4S と外部連携

8 のサービス・41 本の呼び出し(読む 29 本・書く 12 本)

BOUNTY が自分から呼んでいる外のサービスの一覧。ログインと参加登録は 4S、通知はプッシュとメールの各サービス、画像の保存や計測はそれぞれのサービスを使っている。

一覧は呼び出しの宣言から作っていて、宣言に無い呼び出しはテストで落ちる。だから、この頁は今の実装と一致している。

  1. 4S: 31 本(読む 25・書く 6)本人の 4S ログイン・認証なし
  2. Firebase Cloud Messaging: 1 本(読む 0・書く 1)サービスアカウント
  3. Web Push: 1 本(読む 0・書く 1)証明書・鍵
  4. Vercel Blob: 3 本(読む 1・書く 2)共有トークン
  5. Upstash Redis: 1 本(読む 0・書く 1)共有トークン
  6. PostHog: 1 本(読む 0・書く 1)API キー
  7. 法人番号 API: 2 本(読む 2・書く 0)API キー
  8. 公開 Web: 1 本(読む 1・書く 0)認証なし

図の読み方: 真ん中が BOUNTY、まわりがつないでいるサービス。BOUNTY へ向かう矢印は「読む」(BOUNTY が情報を受け取る)、サービスへ向かう矢印は「書く」(BOUNTY が送る・変える)、両方の矢印は両方。線の上の札は、使う認証の種類の印と呼び出しの本数。下のボタンを押すと、そのサービスの節へ移る。

各行は一つの呼び出し。左の札は HTTP のメソッド(濃い札は書き込み)、題は呼ぶ経路、その下は何のために呼ぶか、使う認証、いつ呼ぶか(本人の操作・運営の操作・定期の処理)、BOUNTY が読む項目。

4S

4S Inc. ログイン・参加登録・チケット・リファラルの正本
仕様を開く

4S はログイン・本人のプロフィール・参加登録・チケット・リファラルの正本。BOUNTY は利用者本人の 4S のログインで読み、運営の画面では運営本人の権限でイベントの参加者を読む。

向き: BOUNTY が読む呼び出しと、BOUNTY から送る・変える呼び出しの両方がある(読む 25 本・書く 6 本)。

失敗したとき: 4S に届かないとログインはできない。運営の権限は 4S で定期的に確かめ直していて、届かない状態が猶予を過ぎて続くと運営の操作を断る。参加者の取り込みは 4S の全部のページを読めたときだけ反映し、途中で失敗したら何も変えない。アプリの中の参加登録で応答が分からなかったときは、登録できたと決めつけない。

4S との主なやり取りを三つの図にした。図の左から右へ、本人(または運営)、BOUNTY、4S。上から順に起きる。

4S でログイン(OAuth + PKCE)

  1. 参加者 → BOUNTY: ログイン
  2. 参加者 → 4S: GET /oauth/authorize
  3. 4S → BOUNTY: 認可コード
  4. BOUNTY → 4S: POST /oauth/token
  5. BOUNTY → 4S: GET /.well-known/jwks.json
  6. BOUNTY → 4S: GET /users/me
  7. BOUNTY: 本人を迎える

4S のアカウントでログインする流れ。本人は 4S の画面でログインし、BOUNTY は受け取った認可コードをトークンに換え、署名を確かめてから本人のプロフィールを読み、BOUNTY の利用者として迎える。

メールのコードでログイン

  1. 参加者 → BOUNTY: メールアドレス
  2. BOUNTY → 4S: POST /auth/email/request
  3. 4S → 参加者: コードのメール
  4. 参加者 → BOUNTY: コード
  5. BOUNTY → 4S: POST /auth/email/verify
  6. BOUNTY → 4S: GET /oauth/authorize-info
  7. BOUNTY → 4S: POST /oauth/authorize/approve
  8. BOUNTY → 4S: POST /oauth/token

メールに届くコードでログインする流れ。BOUNTY が 4S にコードの送信を頼み、本人が入力したコードを 4S で確かめてから、4S のログインと同じトークンを受け取る。

参加登録と受付

  1. BOUNTY → 4S: 参加登録を全部読んで参加者をそろえる
  2. BOUNTY: 参加者をそろえる
  3. 運営 → BOUNTY: QR・NFC を読む
  4. BOUNTY → 4S: 受付で読んだ QR の参加登録を名前で引く
  5. BOUNTY → 4S: 受付で読んだ QR の参加登録を引く
  6. BOUNTY → 4S: 受付の NFC でチェックインする
  7. BOUNTY → 4S: 受付の前後で参加登録を読み直す

参加登録と会場の受付の流れ。BOUNTY は定期的に 4S の参加登録を読んで参加者をそろえる。会場で運営が QR を読むと 4S でその人の参加登録を引き、NFC で受付すると 4S にチェックインを書き、その前後で参加登録を読み直す。

ログイン

  • GET/oauth/authorize4S のログイン画面へ送る本人の 4S ログイン本人の操作
  • GET/ja/auth/loginApple でのログインを選べる入口へ送る本人の 4S ログイン本人の操作
  • POST/oauth/token認可コードをトークンに換える本人の 4S ログイン本人の操作access_token · refresh_token · id_token · expires_in
  • POST/oauth/token期限の切れたトークンを更新する本人の 4S ログイン本人の操作access_token · refresh_token · expires_in
  • GET/.well-known/jwks.jsonID トークンの署名を確かめる認証なし本人の操作keys
  • GET/config使えるログイン方法を知る認証なし本人の操作APPLE_SIGNIN_ENABLED
  • POST/auth/email/requestメールにログインのコードを送る認証なし本人の操作challengeId · expiresIn
  • POST/auth/email/verifyメールのコードを確かめる認証なし本人の操作accessToken · expiresIn
  • GET/oauth/authorize-infoメールログインの許可画面の中身を読む本人の 4S ログイン本人の操作client.id · client.name · client.description
  • POST/oauth/authorize/approveメールログインで BOUNTY を許可する本人の 4S ログイン本人の操作redirectUrl

自分

  • GET/users/me本人のプロフィールと One QR の材料を読む本人の 4S ログイン本人の操作ログインQR参加登録id · slug · firstName · lastName · nativeName · title · bio · avatarUrl · email · checkinToken · organizationMembers
  • PUT/users/me本人が選んだときだけプロフィールを書き戻す本人の 4S ログイン運営の操作
  • GET/events/:eventId/entries/:entryId/referral-descendants招待した人の木を描く本人の 4S ログイン本人の操作entry · children · childrenTotalCount
  • POST/events/:eventId/entries/:entryId/invitation-code本人の招待コードを出す本人の 4S ログイン本人の操作code · maxRedemptions · redeemedCount · remaining · targetTicket
  • GET/events/:eventId/referral-ranking招待の順位を読む本人の 4S ログイン本人の操作ランキングitems.rank · items.user · items.descendantCount

参加登録

  • POST/users/me/avatar参加登録で選んだ写真を上げる本人の 4S ログイン本人の操作avatarUrl
  • GET/events/:eventId/tickets公開中のチケットを並べる認証なし本人の操作id · name · price · status · paymentType
  • GET/tickets/:uniqueIdリンクで渡されたチケットを開く認証なし本人の操作id · eventId · name · price
  • GET/events/:eventId/invitation/:codeリファラルコードを確かめる認証なし本人の操作自分valid · event · ticket
  • GET/events/:eventId/questions参加登録の設問を読む認証なし本人の操作questions
  • GET/events/:eventId/my-questions選んだチケットの設問と前の回答を読む本人の 4S ログイン本人の操作自分questions · answers
  • POST/events/:eventId/registerアプリの中で参加登録する本人の 4S ログイン本人の操作entry · state
  • POST/events/:eventId/tickets/:ticketId/prepaid-checkout事前決済のページを作る本人の 4S ログイン本人の操作url · sessionId
  • GET/events/:eventId/entries本人の参加登録と状態を確かめる本人の 4S ログイン本人の操作QR自分イベントentries.id · entries.state · entries.checkedInAt · entries.ticketId

メッセージ

  • GET/events/:eventId/entries/:entryId/referral-ancestors誰に招待されたかをたどる本人の 4S ログイン本人の操作自分entry · ancestors · truncated

イベント

  • GET/events/:eventIdイベントの題・日程・登録の設定を読む認証なし本人の操作参加登録セッションid · title · schedules · organizers · requiresFacePhoto · speakers · stages
  • GET/events/my-entries本人が参加するイベントを全部読む本人の 4S ログイン本人の操作自分entries.eventId · entries.state · entries.checkedInAt
  • GET/slug/:slugslug から人・イベント・コミュニティを引く認証なし本人の操作QR公開の読み取りtype · data.id · data.slug · data.nativeName · data.title · data.avatarUrl
  • GET/communities/:communityId/eventsSPIKES のイベントを並べる認証なし定期 purge-messagesevents · pageInfo

企業ページ

  • GET/organizations/:organizationId協賛の会社の名前とロゴを読む認証なし本人の操作イベントname · slug · type · logoUrl · websiteUrl

Firebase Cloud Messaging

Google ネイティブアプリのプッシュ
仕様を開く

ネイティブアプリへのプッシュ通知を送る。iPhone への通知も Firebase を通して届く。

向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。

失敗したとき: 端末の登録が消えたと分かったときだけ、その端末への送信をやめる。一時的な失敗では止めず、復旧すれば同じ端末へまた送る。

プッシュ通知

  • POST/v1/projects/:projectId/messages:sendネイティブアプリへプッシュを送るサービスアカウント本人の操作通知name · error.details

Web Push

ブラウザ各社のプッシュ配信(RFC 8030 / 8291 / 8292)
仕様を開く

ブラウザとホーム画面に置いた Web アプリへプッシュ通知を送る。

向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。

失敗したとき: 配信先がもう無いと返されたら、その購読を止める。それ以外の失敗が続いたときも、決めた回数で止める。

プッシュ通知

  • POST/:subscriptionEndpointブラウザ・ホーム画面のアプリへプッシュを送る証明書・鍵本人の操作通知status

Vercel Blob

画像・添付の保存
仕様を開く

画像や添付ファイルを保存する。

向き: BOUNTY が読む呼び出しと、BOUNTY から送る・変える呼び出しの両方がある(読む 1 本・書く 2 本)。

自分

  • PUT/api/blob/ポートフォリオの添付をブラウザから直接上げる共有トークン本人の操作url

今日のワイ

  • PUT/api/blob/画像・添付を保存する共有トークン本人の操作自分BOSHUイベントurl · pathname
  • GET/:pathname非公開の保存物を読む共有トークン本人の操作BOSHU運営bytes

Upstash Redis

回数制限の数え
仕様を開く

回数の制限(短い時間に呼びすぎていないか)を、全部のサーバで共有して数える。

向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。

ログイン

  • POST/pipeline連続の操作を数えて止める共有トークン本人の操作QRBOSHUイベントフォローresult

PostHog

同意した人だけの利用計測
仕様を開く

計測に同意した人の利用だけを送る。同意していない人の情報は送らない。

向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。

契約

  • POST/i/v0/e/同意した人の画面の利用を記録するAPI キー本人の操作

法人番号 API

国税庁 法人番号公表サイト
仕様を開く

会社の名前から国税庁の法人番号を探し、法人番号から会社を確かめる。

向き: BOUNTY が読むだけ(読む 2 本・書く 0 本)。

企業ページ

  • GET/4/name会社の名前から法人番号を探すAPI キー本人の操作学生団体・ベンチャーcorporateNumber · name · furigana · kind · prefectureName · cityName · streetNumber · process · closeDate · updateDate
  • GET/4/num法人番号から会社を確かめるAPI キー本人の操作学生団体・ベンチャーcorporateNumber · name · furigana · kind · prefectureName · cityName · streetNumber · process · closeDate · updateDate

公開 Web

許可したホストの画像・リンクの下見

許可したホストだけから、画像とリンクの題を読む。

向き: BOUNTY が読むだけ(読む 1 本・書く 0 本)。

自分

  • GET/:path許可したホストの画像とリンクの題を読む認証なし本人の操作BOSHU学生団体・ベンチャーog:title · og:image · bytes
4S と外部連携 | Bounty Developer