カクカクしかじか

技術的なアレコレ

OpenAPIのYamlファイルの中で出てくる「~1」って何?

概要

現場でOpenAPIスキーマをいじっていて、ファイル内に出てくる ~1 って何の記法だ?ってなってしまったので、 ChatGPTに尋ねてみたところ、それっぽい回答が得られたのでそれをメモします。

※以下は、例です。

  /orders/settle:
    $ref: ./resources/orders.yml#/paths/~1orders~1settle

以下、ChatGPT回答

「~1」という表記は、URLエンコードにおいて、スラッシュ「/」を表すために使用される特殊な表記方法の一つです。

具体的には、「~」がエスケープ文字で、「1」がスラッシュを表すための置換文字として使われます。つまり、「~1」は「/」と同じ意味を持ちます。

OpenAPIのYamlファイルにおいては、APIエンドポイントのパスにスラッシュが含まれる場合、これを「~1」という表記に置き換える必要があります。例えば、以下のようなパスがあった場合、

/users/{user_id}/items/{item_id}

これをURLエンコードすると、以下のようになります。

/users/%7Buser_id%7D/items/%7Bitem_id%7D

このURLエンコードされたパスをOpenAPIのYamlファイルに記述する際には、「~1」を使ってスラッシュを表現します。

/users/{user_id}/items/{item_id}:
  get:
    ...

は以下のように表現されます。

/users/{user_id}~1items/{item_id}:
  get:
    ...