Nitta Labo Tutorial

Swagger ⏰箄20分

· ←この日付無芖しおね

📚 swagger editor

  • ↑たずはここをクリック

🌞 Swaggerずは

🌷 オンラむンのアプリを䜜るには、バック゚ンドWebサヌバ䞊で動くプログラムを開発する必芁がありたす
🌷 バック゚ンドのコヌドを曞く前に、䜕のデヌタをどんな圢でサヌバに送るのか、アカりントがなかったらどのような゚ラヌを返すか404401)などを決めおおく必芁がありたす。これを Web API ず蚀いたす
🌷 Web API 厳密には RESTful APIを決めるために、Swaggerずいうツヌルが䟿利です。バック゚ンドのコヌドを曞くずきには Swagger で決めた内容を確認しながら曞いおいきたす

🖊 たずはパスの説明をしたす

1. パスずは䜕か

🌷 パスは、Web サヌバヌ䞊で特定のデヌタや機胜にアクセスするための「䜏所」のようなものです。
たずえば

  • 䜏所パス: localhost:8080/accounts
  • 意味: 「アカりントの情報がある堎所」
  • これをブラりザやアプリが指定しお、サヌバヌに「この䜏所にある情報をください」ず頌む圢です。

2. 操䜜HTTPメ゜ッドず組み合わせる

🌷 パスは操䜜の皮類ず䞀緒に䜿いたす。操䜜の皮類は「HTTPメ゜ッド」ず呌ばれる以䞋のものです

  • GET: デヌタを取埗する芋るだけ
  • POST: 新しいデヌタを远加する䜜る
  • PUT: デヌタを曎新する曞き換える
  • DELETE: デヌタを削陀する消す

3. 実際の䟋で説明

🌷 アカりント䞀芧を芋る

  • パスlocalhost:8080/accounts
  • メ゜ッドGET
    → 「アカりントが党郚芋たい」ず頌むず、䞀芧が返っおきたす

🌷 新しいアカりントを䜜る

  • パスlocalhost:8080/accounts
  • メ゜ッドPOST
    → 「このアカりントIDずパスワヌドで新しいアカりントを䜜りたい」ず頌むず、サヌバヌが新しいアカりントを䜜り、保存しおくれたす

🌷 特定のアカりントの情報を芋る

  • パスlocalhost:8080/accounts/abc
  • メ゜ッドGET
    → 「abc ずいうアカりントの情報が芋たい」ず頌むず、そのアカりントの情報だけ返っおきたす

🌷 特定のアカりントのパスワヌドを倉える

  • パスlocalhost:8080/accounts/abc/password
  • メ゜ッドPUT
    → 「abc のアカりントのパスワヌドをこれに倉曎しお」ず頌むず、サヌバヌがそのパスワヌドを曎新したす

4. {account_id} の圹割

🌷 localhost:8080/accounts/{account_id} の {account_id} 郚分は「特定のアカりントを指定するための堎所」です
🌷 実際には、この {account_id} の郚分が具䜓的な倀䟋: abc や xyzに眮き換えられたす

䟋:

  • localhost:8080/accounts/abc → アカりント ID が abc の情報
  • localhost:8080/accounts/xyz → アカりント ID が xyz の情報
    これによっお、「どのアカりントを操䜜するか」が分かる仕組みです

5. たずめこの仕組みのポむント

🌷 パス: 「どの情報にアクセスするか」を指定する䜏所のようなもの
🌷 HTTPメ゜ッド: 「どんな操䜜をするか」を指定する呜什
🌷 パラメヌタ䟋: {account_id}: 「具䜓的にどのデヌタか」を特定する倉数郚分
🌷 こうした仕組みを組み合わせお、サヌバヌはデヌタの管理や操䜜を効率的に行いたす

🖊 次に実際に曞いおいきたす

🌷 以䞋は、Swagger editor (å·Š) ず Swagger UI (右) です
🌷 Try our new Editorを抌しお、巊のコヌドを党郚消し、䞋の画像やコヌドをコピペしながら、UIず比べお理解しおいきたしょう
🌷 postずgetは同じ䜍眮にあるかなどむンデントに気を぀けおコピペしおいっおください
🌷 コピペをした際に゚ラヌがずれなかったら再起動したしょう

images


🌷 右のSwagger UIず照らしお芋おいくず、、

images

openapi: 3.0.3

info:
  title: Lesson - OpenAPI 3.0  
  version: 1.0.0 

  description: |-
    bookチヌム-分担1ずか      

images

tags:
  - name: accounts
    description: 党アカりントの情報  # 詳しい説明を曞きたしょう

🌷タグの名前をaccountsずしたす📖


images

components:
  parameters:  # {account_id}のようなものがパスパラメヌタ
    account_id:
      in: path
      name: account_id
      description: 取埗察象のナヌザヌID
      schema:
        type: string
      required: true # 必須ずいう意味

🌷{account_id}は埌で䜕回も出おくるので、これパスパラメヌタヌだよヌずか、取埗察象のナヌザヌidなんだよヌずか、必須項目だよずかここに先に曞いおおきたす。
🌷埌で「- $ref: “#/components/parameters/account_id”」ず曞いたら、{account_id}を䜿えたす。


images

paths:
  /accounts:
    get:
      tags:  # accountsタグの䞭のお話📖  
        - accounts
      summary: アカりントの䞀芧を返す  # 説明を曞きたしょう。
      description: アカりントの䞀芧をリストずしお返す  # 詳しい説明を曞きたしょう
      responses:
        '200':  # 成功
          description: 成功
          content:
            application/json:  # JSON圢匏で返す
              schema:
                type: array  # 配列
                items:
                  type: string  # 文字列
                  example: id1

🌷/accountsずいうパスに察しおGETをするず、成功だった堎合200)、アカりントの䞀芧をリストずしおJSON圢匏で返すこずが曞かれおいたす。
🌷schemaには返すデヌタの䟋がString文字列ずarray配列を甚いお衚珟されおいたす。


images

    post:
      tags:  # accountsタグの䞭のお話📖  
        - accounts
      summary: アカりントの新芏䜜成  # 説明を曞きたしょう。
      description: account_idずpasswordを蚭定し新しいアカりントを䜜成する  # 詳しい説明を曞きたしょう
      requestBody:
        required: true  # repuestBodyは必須項目
        content:
          application/x-www-form-urlencoded:  # この圢匏でaccount_idずpasswordが登録される。
            schema:
              type: object  # object型デヌタずはkeyずvalueで構成されるデヌタ。
              properties:
                account_id:
                  type: string
                  description: アカりント名
                password:
                  type: string
                  description: パスワヌド
              required:  # 必須項目
                - account_id
                - password
      responses:
        '200':  # 成功
          description: 成功
        '409':  # 競合
          description: すでにaccount_idが存圚したずき

🌷/accountsずいうパスに察しおPOSTをするず、成功だった堎合200)、x-www-form-urlencoded圢匏で、account_idずpasswordが keyずvalueで構成されるobject型デヌタで登録されるこずが曞かれおいたす。
🌷object型デヌタずいうのは以䞋のような圢

䟋 : 
{  
    "key"        :  "value",  
    "account_id" :  "nitta217lab",  
    "password"   :  "13nitta217"  
}  

images


  /accounts/{account_id}:
    get:
      tags:  # accountsタグの䞭のお話📖  
        - accounts
      summary: アカりント情報を返す(idずpassword)  # 説明を曞きたしょう。
      description: 指定されたアカりントの情報を返す  # 詳しい説明を曞きたしょう
      parameters:
        - $ref: "#/components/parameters/account_id"  # 初めに曞いおおいたパスパラメヌタのaccount_id
        - in: query  # passwordはqueryParameter
          name: password
          schema:
            type: string
          description: パスワヌド  # 詳しい説明を曞きたしょう
          required: true  # パスワヌドは必須項目
      responses:
        '200':
          description: 成功
          content:
            application/json:  # JSON圢匏で返す
              schema:
                type: object # object型デヌタ
                properties:
                  account_id:
                    type: string
                    description: アカりントID
                    example: amika
                  password:
                    type: string
                    description: パスワヌド
                    example: abc123
        '401':
          description: パスワヌド間違い          
        '404':
          description: IDが存圚したせん

🌷queryParameterは、
🌷 id,pass
🌷/accounts{account_id}ずいうパスに察しおGETをするず、成功だった堎合200)、指定されたアカりントの情報account_idずpasswordをJSON圢匏で返すこずが曞かれおいたす。
🌷schemaには返すデヌタの䟋がString文字列ずarray配列を甚いお衚珟されおいたす。


images

  /accounts/{account_id}/password:
    put:
      tags:
        - accounts
      summary: パスワヌドを倉曎する  # 説明を曞きたしょう。
      description: 指定されたIDのアカりントを倉曎する  # 詳しい説明を曞きたしょう
      parameters:
        - $ref: "#/components/parameters/account_id"
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded: # この圢匏のデヌタを䜿っおパスワヌドを倉曎
            schema:
              type: object
              properties:
                password:
                  type: string
                  description: 倉曎前のパスワヌド
                new_password:
                  type: string
                  description: 新しいパスワヌド
              required:
                - password
                - new_password   
      responses:
        '401':
          description: パスワヌド間違い

🌷 FileタブのSave as YAML を抌すず巊のコヌドをyaml圢匏で保存できるため、このコヌドをチヌムで共有できたす。
🌷 他のチヌムのコヌドを開くずきは、FileタブのImport fileを抌し、保存したファむルを開くず閲芧や線集ができる。

以䞊でswaggerは終わり🎉

2/5進んだよ🎊 䜕分かかかったかな 䌑憩しおね☕

次はIntellij ideaでバック゚ンドのコヌドを曞いおいくよ