.devに「2021年も終わるので、0からREST APIを作るならどうしようかなを考えてみた(Go編)」を書いた

Date
November 7, 2021
Private
用語
2021年も終わるので、0からREST APIを作るならどうしようかなを考えてみた(Go編)※WIP

MySQLを使ったアプリケーション開発がまだまだ主流と感じてますので、MySQLを使う事と、REST APIで有ること。そしてAPIの仕様はOpen APIをベースに、スキーマ駆動で開発していく事を大前提としています。 devでは、下記のポイントを重点的にかければと思ってます。 ※他にも考えないと行けないなと思う事とか、見直さないとなと思ってることもありますが、とりあえずできたところベースで Open APIを採用する理由の一つとして仕様を外部に公開する事が考えられます。外部と言わないまでも別のアプリケーションと連携する際に、スキーマを連携すればクライアントコードを比較的簡単に生成できるメリットもありますね。 Open APIのスキーマと開発したREST APIとで仕様を同期する方法としては、以下の2点考えられます。 コードからジェネレート Open APIのスキーマを変更して、サーバ側のコードをジェネレート 今回ここでは、2番目を採用しました。 特に何か特別な事をしてることはなく、下記のツールを利用しています。 go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen@latest -generate types -package openapi openapi/src/generated/openapi/openapi.yaml > openapi/types.gen.go; go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen@latest -generate chi-server -package openapi openapi/src/generated/openapi/openapi.yaml > openapi/server.gen.go go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen@latest -generate spec -package openapi openapi/src/generated/openapi/openapi.yaml > openapi/spec.gen.go こちらに書かれている物を参考にしました。 これまでは、フルスクラッチで実装したり、 https://github.com/go-playground/validator を採用して、 Example にある通り type User struct { FirstName string `validate:"required"` LastName string `validate:"required"` Age uint8 `validate:"gte=0,lte=130"` Email string `validate:"required,email"` FavouriteColor string `validate:"iscolor"` // alias for 'hexcolor|rgb|rgba|hsl|hsla' Addresses []*Address `validate:"required,dive,required"` // a person can have a home and cottage...

2021年も終わるので、0からREST APIを作るならどうしようかなを考えてみた(Go編)※WIP