Open9

サーバーサイドDart

やまやま

普通のREST APIは作れないのか?

Serverpodで自動生成されるAPIエンドポイント・クライアントは、すべてPOSTリクエストを利用しているし、エンドポイント名についても柔軟な指定はできず、定義クラス名が直接変換され用いられる模様。
単一のFlutterアプリに対して単一のバックエンドとして定義する際にはそれでも十分なのであろうが、マイクロサービスとして独立させたいときには不便だと思う。

参考:
https://zenn.dev/shima999ba/articles/5299e7005867b6

REST APIを作るには、標準ライブラリdart:io等を使ってやるのが結局いいのかも?express.jsでサーバーレス関数(Lambda, Cloud Functionsなど)をサクッと書くときぐらいの感覚で使えそう。メッセージキューやタスクキューなどの仕組みを、フレームワークではなくクラウドに依存する構成なのであれば、Dartサーバーサイドのコード自体はその程度でも十分なのかもしれない。

https://qiita.com/0905Tom/items/795250179b1ac1ebb417
https://note.com/nttrtech/n/n0348c0c6283a

やまやま

標準ライブラリでREST APIは作れるが、openAPIスキーマによる自動生成とかはなさそう?

一方自動生成はgRPCならすでに対応している模様。
(クラウド依存であるため)フルスタックWebフレームワークとしての機能は必要なく、protocolやschemaに基づいたサーバーサイドとクライアントサイドのコード自動生成の恩恵を最大化したいなら、gRPCでエンドポイントを定義するのも良いかもしれない。

https://zenn.dev/kei_hongyo/articles/cb6aa853974e8e
https://dev.to/dinko7/dart-on-the-server-exploring-server-side-dart-technologies-in-2024-k3j

やまやま

Shelfという選択

ServerpodはFlutterアプリ向けのAPIクライアントを自動生成してくれるというメリットがある一方、他のクライアントやマイクロサービスとの通信には向いていないように思える。
エンドポイントの詳細情報はフレームワーク側に隠蔽されているし、ましてOpenAPIやgRPCのようなスキーマ定義に対応しているようには思えない。

そこでshelfという選択肢がありそうだ(shelf自体はreddit記事で見つけた)。
↓shelfの紹介記事。Dockerfileも掲載してくれて親切!
https://gaprot.jp/2022/03/07/shelf/
OpenAPIも対応していそう。
https://pub.dev/packages/shelf_open_api_generator