Swagger v 1.2 を使用したサービスのSwagger API宣言があります
Swaggerに対する私の最初の感覚は、JSONスキーマ(ドラフト3および最近のドラフト4)に非常に近く、リクエストおよび応答オブジェクトのJSONスキーマを比較的簡単に生成できるということでした。
ただし、Swaggerの一部はJSONスキーマ構造を再利用しますが、機能のサブセットのみを使用し、Modelsに独自の継承を導入します(subTypes
およびdiscriminator
を使用)。
質問:Swagger API宣言から使用可能なJSONスキーマを生成できる既存のプロジェクトまたはコードがありますか?
最適なJSONスキーマドラフト4およびPythonの使用(ただし、何かあれば喜んで見つけます)。
REST APIを指定し、関連するテストスイートで再利用するためにSwaggerを使用して長い戦いをした後、自分の経験を共有します(自分の質問に答えます)。
Swagger 1.2および2.0状態の仕様は、JSON Schema Draft 4のサブセットのみをサポートします(s。 here )。この意味は:
言い換えると:
実際には、JSONまたはXMLでデータを設計することから始めることはできません。Swaggerでは、Swaggerで開始および終了する必要があります。
私は、Swagger API仕様を取得し、JSONスキーマドラフト4を作成するライブラリのコーディングにしばらく時間を費やしました。
APIを表示およびテストするための本当に見栄えの良いUIを除いて(はい、誰もが同意し、視覚的に非常に楽しいです)、仕様フレームワークが私たちが望むものを使用することを許可していないが、予期しない制限を追加することは奇妙であることがわかりました私たちの設計に。
他のAPI仕様フレームワークを調査して、RAMLを見つけました。 JSON Schema Draft 3/4またはW3C XML Schema 1.0のデータ構造をサポートすることにより一から構築されているため、エクスペリエンスは素晴らしかった-ペイロードの構造が設計されており、API仕様を非常に迅速にオーサリングし、実際のリクエストの検証ができたスキーマは制限を加えることなく仕様の重要なコンポーネントであるため、定義されたスキーマに対する応答は非常に簡単でした。
RAMLはその時点でバージョン0.8でした(バージョン1.0はまだリリースされていませんでした)。
良い質問が解決策の半分になります。私の本当の期待を満たせなかったので、私の質問は間違っていました。修正された質問は次のとおりです。
任意のJSON Schema Draft 4またはW3C XML Schema 1.0で定義されたペイロードを使用してREST APIを指定するために使用する仕様フレームワークおよび手法。
このような質問に対する私の答えは次のとおりです。
使用可能な他の仕様フレームワークがあるかもしれませんが、Swagger(v1.2とv2.0のどちらでもない)は間違いなくそうではありません。本当に多くの機能(コード生成、APIの見栄えの良いドキュメントなど)を提供する以外に、上記の更新された質問に対するソリューションの提供に失敗します。
openapi2jsonschema という名前で同じことを行うpythonツールがあります。 pip
を使用して簡単にインストールできます。
Openapi2のreadmeは、それを使用する最も簡単な方法を示しています。
openapi2jsonschema https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json
お役に立てれば。
ツールを作成しました pyswagger ニーズに合っているようです。
Swagger API宣言をロードし、pythonオブジェクトとSwaggerプリミティブを相互に変換できます。 Swagger対応へのリクエストを行うことができるクライアント実装のセット(requestsおよびtornado.httpclient.AsyncHTTPClientを含む)も提供します直接サービス。
このツールは、PythonでSwaggerを適応させるときに遭遇した最初の問題を解決する傾向があり、現在でもかなり新しいものです。提案を歓迎します。
Swaggerを発見し、これが要件になるのと同じことを自問しました。
この答えを見つけました
ここから直接お試しください:
http://petstore.swagger.wordnik.com/
そして、これをあなたのURLとして入れてください:
http://petstore.swagger.wordnik.com/api/api-docs/pet
すべてのモデルが表示されます。しませんか?それとも何か不足していますか?
問題は、「モデル」が有効なJSONスキーマ4.0/JSONハイパースキーマを指すかどうかです
私はこのようにそれをすることでいくらか成功しました:
swagger.yaml-> proto-> jsonschema
openapi2proto を使用してSwagger yamlからprotoファイルを生成し、次に protoc-gen-jsonschema を使用してJSONSchemaを生成しました。型指定されたJSONSchemaを取得するのに十分ですが、proto3は「必須」型をサポートしていないため、これをお見逃しなく。