株式会社オロ・スキーマ駆動エンジニア・すわ
HTTPリクエスト
HTTPレスポンス
どんなデータをどんな構造で送受信するのか
≒ スキーマ
を、決める必要がある
設計書をつくる
コードをかく
機械可読な設計書をかく
コードを生成する
Node.js用 Webサーバフレームワーク
で、スキーマ駆動開発を加速させる
OpenAPIを利用
TypeScriptコードを自動生成
スキーマに従って開発
OpenAPI Specification
という
「仕様書の仕様」
に従って
仕様書をかきます
paths:
/api/auth:
get:
operationId: getAuthentication
summary: トークン有効確認
tags:
- Authentication
security:
- AccessToken: []
responses:
200:
description: OK
content:
application/json:
schema:
type: object
properties:
user:
$ref: "#/components/schemas/User"
required:
- user
401:
description: Unauthorized
ztrehagemさん(わたし)が作ったコード生成ツールを使って
Fastify向けのTypeScriptコードを生成します
@ztrehagem/openapi-to-fastify-schema
https://github.com/ztrehagem/openapi-to-fastify-schema
$ npm install @ztrehagem/openapi-to-fastify-schema
$ npx openapi-to-fastify-schema ./path/to/your/openapi.yaml
生成されたコードをFastifyで読み込むと……
fastify.withTypeProvider<JsonSchemaToTsProvider>().route({
...generatedSchemas.getUser,
handler: async (req, reply) => {
// Typed!
req.params.userHandle;
await reply.status(200).send({
// Typed!
user: {
handle: "foo",
name: "bar",
},
});
},
});
これ→
paths:
/api/auth:
get:
operationId: getAuthentication
summary: トークン有効確認
tags:
- Authentication
security:
- AccessToken: []
responses:
200:
description: OK
content:
application/json:
schema:
type: object
properties:
user:
$ref: "#/components/schemas/User"
required:
- user
401:
description: Unauthorized
幸せな生活を手に入れよう