私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

既存 RDB 用の GraphQL API サーバを Apollo Server + TypeORM で書いてみた

コロナ巣篭もりを良い機会にという訳でもないですが、ここひと月程 GraphQL について学習してました。が、書籍でもネット記事でもデータベースを含めた新規開発なストーリー(データストレージはたいてい NoSQL タイプ)が殆どで、「既存の RDB データベースの為に API サーバを立てる」という(少なくとも自分には)とても良くありそうなユースケースが無かったので、簡単な CRUD が出来るプログラムを書いてみました。これです↓。

github.com

既存 RDB前回記事で紹介した world database を採用。動作までの手順は以下の通りです。

  1. world database をセットアップ(前回記事紹介の Docker イメージを使えば簡単)。
  2. cp ormconfig.json.sample ormconfig.json して、上記 DB の諸元を記入。
  3. npm install
  4. npm start

http://localhost:4000/graphql から Apollo Server ビルトインの PlayGround で API を試せます。こんな感じ↓です。

f:id:mariyudu:20200505175459p:plain

プログラミングの参考にしたのは下記の書籍とネット記事です。

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

medium.com

既存 DB 用に TypeORM エンティティをガリガリ書くのはしんどいなぁと思ってたら typeorm-model-generator という便利なものがあったので、これで生成後に調整する、という手順がラクラクでした。

TypeORM は触り始めたばかりで未だよく分かっておらず、特に更新時のリレーションについては GraphQL なスキーマの枠組みの中でどのように実装したら良いのか未だ答えが出ていないので、現状では手つかずです。誰か良いやりかたをご存知でしたら教えて下さい。