###### tags: `API仕様` # 予約API ## URI(demo環境) ↓自分自身の予約をしたい時 POST https://bff-wn5zp5rybq-an.a.run.app/ride/reserve ↓別の人の予約をしたい時(オペレータ向け) POST https://bff-wn5zp5rybq-an.a.run.app/admin/ride/reserve ## URI(熱海本番環境) ↓自分自身の予約をしたい時 POST https://bff-z5ltmpxiqa-an.a.run.app/ride/reserve ↓別の人の予約をしたい時(オペレータ向け) POST https://bff-z5ltmpxiqa-an.a.run.app/admin/ride/reserve ## リクエストボディ(JSON) ```typescript { origin: { location: {latitude: number; longitude: number}; // 経度緯度 }; destination: { location: {latitude: number; longitude: number}; }; headcount: number; payment: {method: 'cash'}; // ひとまず現金払いのはこれ datetime: { at: number; // unixtime(秒) acceptableWaitingSeconds: number; // 待てる時間の幅(秒数。この幅の間に相乗りが入る) }; userName?: string; // ドライバーなどへの表示用(指定しなくてもいい), uid?: string; // オペレータ以上の権限を持つ人が別の人の予約をする場合、その人のUIDが必要 }; ``` ## レスポンスボディ (JSON) ```typescript { id: string; tefId: string; tefSessionId?: string; owner: string; userName: string; origin: TransportPlace; destination: TransportPlace; headcount: number; createdAt: number; shared: boolean; vehicleId?: string | null; requestedTime: { earlier: number; later: number; }; departureTime: { earlier: number | null; later: number | null; }; arrivalTime: { earlier: number | null; later: number | null; }; encodedRoutePolyline?: string; boardingState: BoardingState; vehicleAssignmentState: VehicleAssignmentState; scheduledTransport?: { id: string; timeId: string; groupOid: string; }; charterDistance: number; payment: { method: PaymentMethod; state: 'unpaid' | 'paid' | 'failed'; totalFare: number; purchasedAt?: number; }; }; ``` ## 呼び出し前のユーザ登録(なくても動くが、ユーザ名はあった方が良い) APIを呼び出すには、先にユーザ登録がされている必要がある アプリで作成したユーザの場合、このユーザ登録がされる アプリを使わずにユーザを登録するには、firebase authenticationで電話番号認証をしてから、ユーザ登録APIを呼び出す必要がある(初回のみ) デモ POST https://bff-wn5zp5rybq-an.a.run.app/user 熱海 POST https://bff-z5ltmpxiqa-an.a.run.app/user RequestBody {name: string} 上記のURIに、登録したいユーザー名をRequestBodyに入れてPOSTすると、ユーザが登録される ## 電話番号認証 手動でやる場合、このサイトのような手順で処理する必要がある https://firebase.google.com/docs/auth/web/phone-auth?hl=ja ただ、途中の電話番号入力・コード入力・reCAPTCHA表示などUI周りの実装に時間がかかるため Webアプリの場合は、こちらのfirebaseUIを使うと実装が楽になる https://firebase.google.com/docs/auth/web/firebaseui?hl=ja ## API認証 authorizationヘッダーにトークンをつけて送る必要がある 「Authorization: Bearer <FirebaseのToken>」 FirebaseのTokenは、firebaseにログインしてから、以下のようなメソッドで呼び出す必要がある。 https://firebase.google.com/docs/auth/admin/verify-id-tokens?hl=ja#retrieve_id_tokens_on_clients