Open APIとgRPCのメモ

2022-05-20
2022-05-20

OpenAPIの一例

ReduxToolkit RTKQuery: データフェッチとキャッシュのライブラリだが、Code Generation | Redux Toolkitのようにコード生成ができる。

OpenAPIとは

The OpenAPI specification is a language-agnostic definition format used to describe RESTful APIs. OpenAPI仕様は、 RESTfulAPIを記述するために使用される言語に依存しない定義形式です。 https://docs.nestjs.com/openapi/introduction より

ざっくり理解

flowchart LR A["OpenAPI定義ファイル<br />(hoge.yml)"] -->B["RTK Query Code Generation<br />(hoge.ts)"] -->C["使える!<br />(redux storeに定義したり、各コンポーネントでAPI呼び出し)"]

q: hoge.ymlはどんな感じで生成するの?

良さそうなところ

  • 1.OpenAPIの定義ファイルがあれば、一気にエンドポイントを生成・変更できる
  • 2.TypeScriptの場合、型が効く(RequestやResponseなども含めて)

どんな感じで使うの

package.json
"scripts": { "gen:api": "rtk-query-codegen-openapi ./openapi-config.json", }, "dependencies": { "@reduxjs/toolkit": "^1.8.0", "@rtk-query/codegen-openapi": "^1.0.0-alpha.1", "react-redux": "^7.2.6" } }

のように、コマンドで一気に、APIエンドポイントの生成をすることができる。

openapi
{ "schemaFile": "./hoge.yaml", // OpenAPIの仕様書 "apiFile": "./template.ts", // createApi呼び出し箇所 "outputFile": "./index.ts", // OpenAPIの仕様書から作成される実際のAPI呼び出しやリクエスト・レスポンスなど "exportName": "api", // export名 "hooks": true // hooksを生成するか ex) useHogeHoge }
hoge.yml
swagger: '2.0' info: title: 'hoge.proto' version: 1.0.0 description: 'お試し' consumes: - application/json produces: - application/json host: 'hoge.com' basePath: '/v1' schemes: - 'https' paths: ...

みたいなファイル

OpenAPI Specification - Version 3.0.3 | Swaggerに定義が載っている。

gRPC

.protoファイルを使用して、APIを定義する。

IDL(インターフェース定義言語)

リンク

API 設計: gRPC、OpenAPI、REST の概要と、それらを使用するタイミングを理解する | Google Cloud Blog