プロジェクトの詳細

予約サービスのフロントとロッカーAPIを繋ぐAPIの開発。 また、サービスで使う決済基盤のAPI構築。

使用技術

  • API: gRPC, Go

    エンドポイントになるAPIとDBからデータを受け取って処理するAPIなど社内パッケージが複数に分かれており通信にはgRPCを使用。

  • 決済モジュール:PHP、Laravel
  • API周辺:Rest Client, Postman, Swagger

参加期間

  • 2020年5月〜2020年11月

開発規模

  • 全体では20人ほど
  • API周りは3人

プロジェクトでの課題

サービス上、他社APIを社内会員基盤と連携しフロントエンドにAPIとして提供する。 また、APIの実装に合わせてAPIを作成するためフロントエンドとの連携に時間がかかる課題も発生した。 決済機能においては、モジュールがPHPのため別途PHPでAPIの用意。

主な取り組み

  • ロッカーAPIの実装
  • Swaggerを使用したAPI仕様書の作成とモック作成
  • 決済基盤API部分のフルスクラッチ実装

【ロッカーAPIの実装】

社内パッケージでは、ログイン機能などRedshiftへの基本的なAPIが既に実装されていたため、プロジェクトで使用する連携先APIにリクエストするAPIを実装する必要がありました。APIの実装には、Go BuildInパッケージのnet/httpを使用し、クライアントを作成しました。 APIの実装に苦労しましたが、より大きな課題は、社内パッケージの使い方を学ぶことでした。少し特殊なパッケージで新しかったのもあり、ドキュメントが少なく、概念の理解が困難だったため、パッケージの挙動を理解するのに多くの時間を費やしました。 実装にかけられる時間が少なくタイトなスケジュールでの実装になりましたが、フレームワークやモックを使うことで大きな遅れもなく実装できたと考えています。

また、APIだけの開発をするのは初めての経験だったため、実践的なAPI開発や他社API基盤とのAPI連携など、フロントエンドだけを使っていた場合よりもバックエンド側の繋がりを意識できるようになりました。

そして、アウトプットとしてAPIでresponseをの具体的な値の返し方がよくわからず調べ記事書いたりする中でAPIの理解が進んだと感じています。json作る時の自分なりの考え方 (zenn.dev)

【決済基盤APIのフルスクラッチ】

決済モジュールは、別ベンダーが作成したものを使用しました。モジュールはPHPで作成されており、PHPで決済モジュールを組み込んだAPIを作成する必要がありました。 実装に際して手軽にAPIを開発するためLaravelを採用しました。APIの実装が構築段階から使用可能であり、処理の実装が早く実装できると判断したためです。

実装に当たって決済処理の仕様調査を社内で行い、仕様書から必要なAPIを洗い出し実装をしました。APIの洗い出しでは、決済処理の知識がなかったため概念を理解することに苦戦しました。 そのため、モジュールのドキュメントや基本的な使い方などを調べながら実際の決済フローを思い出しながらどういった部分でどの機能が使われているのかをフロー図に書き出しながら洗い出しました。そして、社内でドキュメントからどのAPIで実現しているのかを話し合い必要な機能の実装をしました。モジュールをPHP内のクラスから扱うことができ、円滑に実装できました。

【感じたこと】

プログラミングを始めた時は何も分からずフレームワークを使っていて、「なぜかわからないけどできてる」みたいな状態でした。フロントエンドやバックエンドを経験する中で基本的な処理や流れを理解し改めてフレームワークを使ってみた感想として確かに手に余る機能など多かったりしますが、その分理解できると開発が早くなり便利でした。 特にエスケープや脆弱性を産まない設定などもプロパティの設定のみで可能になったり、実装するのに手の掛かる作業などが省略されているなと実感しました。

「与信のため最初に少量決済する」など、決済領域の常識や文化などがWebサービスの開発を通して知ることができ、楽しく開発できたと考えています。また、物理的なロッカーをAPIを使うことで間接的にでも操作出来たのは今までにない経験で面白いと感じました。書いたコードが実機で動いてるのを見て、実感はなかったが操作できているという不思議な感覚でした。