An OpenAPI codec for Core API.
This is a Python Core API codec for the Open API schema format, also known as "Swagger".
Install using pip:
$ pip install openapi-codec
To create a swagger schema from a coreapi.Document
, use the codec directly.
>>> from openapi_codec import OpenAPICodec
>>> codec = OpenAPICodec()
>>> schema = codec.encode(document)
Install coreapi
and the openapi-codec
.
$ pip install coreapi
$ pip install openapi-codec
To use the Python client library to interact with a service that exposes a Swagger schema,
include the codec in the decoders
argument.
>>> from openapi_codec import OpenAPICodec
>>> from coreapi.codecs import JSONCodec
>>> from coreapi import Client
>>> decoders = [OpenAPICodec(), JSONCodec()]
>>> client = Client(decoders=decoders)
If the server exposes the schema without properly using an application/openapi+json
content type, then you'll need to make sure to include format='openapi'
on the initial request,
to force the correct codec to be used.
>>> schema = client.get('http://petstore.swagger.io/v2/swagger.json', format='openapi')
At this point you can now start to interact with the API:
>>> client.action(schema, ['pet', 'addPet'], params={'photoUrls': [], 'name': 'fluffy'})
Once the openapi-codec
package is installed, the codec will automatically become available to the command line client.
$ pip install coreapi-cli
$ pip install openapi-codec
$ coreapi codecs show
Codec name Media type Support Package
corejson | application/coreapi+json | encoding, decoding | coreapi==2.0.7
openapi | application/openapi+json | encoding, decoding | openapi-codec==1.1.0
json | application/json | decoding | coreapi==2.0.7
text | text/* | decoding | coreapi==2.0.7
download | */* | decoding | coreapi==2.0.7
If the server exposes the schema without properly using an application/openapi+json
content type, then you'll need to make sure to include format=openapi
on the initial request, to force the correct codec to be used.
$ coreapi get http://petstore.swagger.io/v2/swagger.json --format openapi
<Swagger Petstore "http://petstore.swagger.io/v2/swagger.json">
pet: {
addPet(photoUrls, name, [status], [id], [category], [tags])
deletePet(petId, [api_key])
findPetsByStatus(status)
...
At this point you can start to interact with the API.
$ coreapi action pet addPet --param name=fluffy --param photoUrls=[]
{
"id": 201609262739,
"name": "fluffy",
"photoUrls": [],
"tags": []
}
Use the --debug
flag to see the full HTTP request and response.
$ coreapi action pet addPet --param name=fluffy --param photoUrls=[] --debug
> POST /v2/pet HTTP/1.1
> Accept-Encoding: gzip, deflate
> Connection: keep-alive
> Content-Length: 35
> Content-Type: application/json
> Accept: application/coreapi+json, */*
> Host: petstore.swagger.io
> User-Agent: coreapi
>
> {"photoUrls": [], "name": "fluffy"}
< 200 OK
< Access-Control-Allow-Headers: Content-Type, api_key, Authorization
< Access-Control-Allow-Methods: GET, POST, DELETE, PUT
< Access-Control-Allow-Origin: *
< Connection: close
< Content-Type: application/json
< Date: Mon, 26 Sep 2016 13:17:33 GMT
< Server: Jetty(9.2.9.v20150224)
<
< {"id":201609262739,"name":"fluffy","photoUrls":[],"tags":[]}
{
"id": 201609262739,
"name": "fluffy",
"photoUrls": [],
"tags": []
}