API · SDK
API クライアントと SDK の設定
ベース URL をコードから切り離して実際のサービスを指すようにし、サンプルのアドレスが本番環境に届かないようチェックを追加します。
ガイド · Swagger Petstore
Swagger Petstore は、Swagger UI や OpenAPI の数多くのチュートリアルで使われているサンプル API です。example-petstore.com にはありません。このガイドでは、本当のアドレスと動作するリクエスト例、そして公開版が使いにくいときに自分のコピーを動かす方法を説明します。
SmartBear の API ツールである Swagger は、Petstore の公開版を 2 つ運営しています。どちらもペット、注文、ユーザーという同じリソースを備えています。
| バージョン | リクエストのベース URL | API 定義と Swagger UI |
|---|---|---|
| Petstore 3 (OpenAPI 3.0) | https://petstore3.swagger.io/api/v3 | openapi.json · petstore3.swagger.io |
| Petstore (Swagger 2.0) | https://petstore.swagger.io/v2 | swagger.json · petstore.swagger.io |
新しいプロジェクトには Petstore 3 がおすすめです。現在のツールやコード ジェネレーターが前提とする OpenAPI 3.0 仕様に従っています。Swagger 2.0 版も引き続き応答し、古いチュートリアルに登場します。
curl によるリクエスト例です。ベース URL を上のいずれかのアドレスに設定すれば、Postman、Insomnia、生成したクライアントでも同じパスが使えます。
# ステータスが "available" のペット
curl -H "Accept: application/json" "https://petstore3.swagger.io/api/v3/pet/findByStatus?status=available"
# ペットを追加(name と photoUrls は必須)
curl -X POST "https://petstore3.swagger.io/api/v3/pet" \
-H "Content-Type: application/json" \
-d '{"id": 12345, "name": "doggie", "photoUrls": [], "status": "available"}'
# ステータスごとの在庫(テスト用キー付き)
curl -H "api_key: special-key" "https://petstore.swagger.io/v2/store/inventory"
PHP からは、Guzzle を使って同じリクエストを送れます。
// PHP, Guzzle:ステータスが "available" のペット
$client = new GuzzleHttp\Client(['base_uri' => 'https://petstore3.swagger.io/api/v3/']);
$response = $client->get('pet/findByStatus', ['query' => ['status' => 'available']]);
$pets = json_decode((string) $response->getBody(), true);
主なパス: /pet、/pet/findByStatus、/pet/findByTags、/pet/{petId}、/store/inventory、/store/order、/user、/user/login、/user/logout。
Petstore は 2 つのセキュリティ方式を示しています。api_key ヘッダーによる API キーと、OAuth 2.0 フロー(petstore_auth)です。Swagger 2.0 の定義では、認可フィルターのテスト用キーとして special-key が示されています。これらはデモ用の認証情報です。本物のキー、トークン、パスワードを Petstore で試さないでください。
Petstore はオープンソース(Apache 2.0)です。Docker ならコマンド 1 つで動きます。
docker run -d --name petstore -p 8080:8080 swaggerapi/petstore3
# Swagger UI: http://localhost:8080
# API 定義: http://localhost:8080/api/v3/openapi.json
# ベース URL: http://localhost:8080/api/v3
Docker を使わない場合は、swagger-api/swagger-petstore をクローンして mvn package jetty:run で起動します(こちらもポート 8080)。自分のコピーは起動するたびに同じ組み込みのサンプル データ(ペット 10 匹と、いくつかの注文とユーザー)で始まるため、テストは毎回同じように動作します。
OpenAPI 仕様のリポジトリにあるサンプル ファイル petstore.yaml は、サーバーとして http://petstore.swagger.io/v1、パスとして /pets を記載しています。このファイルは仕様を説明するためのもので、背後にサービスはありません。このファイルから生成したクライアントは 404 Not Found を受け取ります。https://petstore3.swagger.io/api/v3 または自分のコピーを指定してください。パスが異なる(/pets ではなく /pet)ため、Petstore 3 の openapi.json からクライアントを生成し直してください。
example-petstore.com は別の名前で、Google のアナリティクスと検索に関するドキュメントに出てくるサンプル ドメインです。API はありません。このドメインの /v2/pet のようなパスへのリクエストには、JSON の説明付きで 410 Gone が返ります。
.env ファイル、Postman の環境、OpenAPI 定義の servers フィールドにあるベース URL を確認し、example-petstore.com を上のいずれかのアドレスに置き換えてください。