Routing¶
Endpoint Routing to Your Python Views¶
Connexion uses the operationId from each `Operation Object`_ to
identify which Python function should handle each URL.
Explicit Routing:
paths:
/hello_world:
post:
operationId: myapp.api.hello_world
If you provided this path in your specification POST requests to
http://MYHOST/hello_world, it would be handled by the function
hello_world in myapp.api module. Optionally, you can include
x-swagger-router-controller in your operation definition, making
operationId relative:
paths:
/hello_world:
post:
x-swagger-router-controller: myapp.api
operationId: hello_world
Automatic Routing¶
To customize this behavior, Connexion can use alternative
Resolvers—for example, RestyResolver. The RestyResolver
will compose an operationId based on the path and HTTP method of
the endpoints in your specification:
from connexion.resolver import RestyResolver
app = connexion.App(__name__)
app.add_api('swagger.yaml', resolver=RestyResolver('api'))
paths:
/:
get:
# Implied operationId: api.get
/foo:
get:
# Implied operationId: api.foo.search
post:
# Implied operationId: api.foo.post
'/foo/{id}':
get:
# Implied operationId: api.foo.get
put:
# Implied operationId: api.foo.post
copy:
# Implied operationId: api.foo.copy
delete:
# Implied operationId: api.foo.delete
RestyResolver will give precedence to any operationId
encountered in the specification. It will also respect
x-router-controller. You may import and extend
connexion.resolver.Resolver to implement your own operationId
(and function) resolution algorithm.
API Versioning and basePath¶
You can also define a basePath on the top level of the API
specification. This is useful for versioned APIs. To serve the
previous endpoint from http://MYHOST/1.0/hello_world, type:
basePath: /1.0
paths:
/hello_world:
post:
operationId: myapp.api.hello_world
If you don’t want to include the base path in your specification, you can just provide it when adding the API to your application:
app.add_api('my_api.yaml', base_path='/1.0')
Swagger JSON¶
Connexion makes the OpenAPI/Swagger specification in JSON format
available from swagger.json in the base path of the API.
You can disable the Swagger JSON at the application level:
app = connexion.App(__name__, specification_dir='swagger/',
swagger_json=False)
app.add_api('my_api.yaml')
You can also disable it at the API level:
app = connexion.App(__name__, specification_dir='swagger/')
app.add_api('my_api.yaml', swagger_json=False)