単純な本のcrudをopenapi3で書いてみる
本の管理crudを作ろう。項目は、title,price,publish_date辺りで
こうやって書いてみるとコーディングとやってる事が変わらんな。
schemasでテーブル定義書いて
pathsでルーティングと引数・戻り値を書く。
入力・出力だけのUIしか書けないので、処理の内容が記述出来ないから、実装まで持っていくのは無理か。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
openapi: 3.0.0 # openapiのバージョン info: # ヘッダ的フィールド title: Test API # このドキュメントのタイトル version: 0.0.1 # このドキュメントのバージョン servers: # APIサーバのURL - url: https://example.com/api/ description: Test API tags: # 各APIをグループ化してまとめるためのタグ - name: book # タグ名 description: 本のCRUD # タグの説明 paths: # APIのアクセスポイント /book/{id}: # パス名(api/helloみたいな感じでアクセスする) get: # メソッド名(get/post/put/delete) tags: - book parameters: # queryだと/hello?str=world なので追加が楽? - in: path # pathだと/hello/{str}、アクセスポイントも書き直す必要がある name: id schema: type: integer required: true # pathの場合は必須項目 description: 本IDの詳細を返す responses: # アクセスしたら、どんなレスポンスを返すか? '200': # HTTPレスポンス番号 description: helloという文字列を返す # 説明は必須(summaryは必須じゃない) content: # レスポンスの内容 application/json: # レスポンスの形式指定(MIMEタイプ) schema: # データ構造(schema = 構造) # シャープは同じファイルを意味する(リンク先を記述) $ref: '#/components/schemas/book' put: # メソッド名(get/post/put/delete) tags: - book parameters: # queryだと/hello?str=world なので追加が楽? - in: path # pathだと/hello/{str}、アクセスポイントも書き直す必要がある name: id schema: type: integer required: true # pathの場合は必須項目 description: 更新した本情報を返す requestBody: description: create book data content: application/json: schema: $ref: '#/components/schemas/book' example: name: first_book price: 650 publish_date: 2023-12-31 responses: # アクセスしたら、どんなレスポンスを返すか? '200': # HTTPレスポンス番号 description: 更新した本データを返す # 説明は必須(summaryは必須じゃない) content: # レスポンスの内容 application/json: # レスポンスの形式指定(MIMEタイプ) schema: # データ構造(schema = 構造) # シャープは同じファイルを意味する(リンク先を記述) $ref: '#/components/schemas/book' /book: # パス名(api/helloみたいな感じでアクセスする) post: # メソッド名(get/post/put/delete) tags: - book requestBody: description: create book data content: application/json: schema: required: title # 必須とするプロパティを配列で指定。この必須はキーの存在を見ます。値が空かどうかは見ません。 $ref: '#/components/schemas/book' example: name: first_book price: 650 publish_date: 2023-12-31 responses: # アクセスしたら、どんなレスポンスを返すか? '200': # HTTPレスポンス番号 description: 作成した本データを返す # 説明は必須(summaryは必須じゃない) content: # レスポンスの内容 application/json: # レスポンスの形式指定(MIMEタイプ) schema: # データ構造(schema = 構造) # シャープは同じファイルを意味する(リンク先を記述) $ref: '#/components/schemas/book' delete: # メソッド名(get/post/put/delete) tags: - book parameters: # queryだと/hello?str=world なので追加が楽? - in: path # pathだと/hello/{str}、アクセスポイントも書き直す必要がある name: id schema: type: integer required: true # pathの場合は必須項目 responses: # アクセスしたら、どんなレスポンスを返すか? '200': # HTTPレスポンス番号 description: 削除した本情報を返す # 説明は必須(summaryは必須じゃない) content: # レスポンスの内容 application/json: # レスポンスの形式指定(MIMEタイプ) schema: # データ構造(schema = 構造) # シャープは同じファイルを意味する(リンク先を記述) $ref: '#/components/schemas/book' # ここに個別のスキーマ(構造)情報を書く components: schemas: # スキーマは、新規作成・更新・戻り値の共通データとして使える(テーブル構造) book: # スキーマ名 type: object # integer,stringなどの型。objectは複数データをもつ型 properties: # objectの中身を羅列する id: # 本のID readOnly: true # post,putでは非表示にする type: integer example: 1 title: type: string example: book_title1 price: type: integer example: 1000 publish_date: # 出版日 type: string format: date example: 2023-12-31 |