<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OpenAPI Archives - OVHcloud Blog</title>
	<atom:link href="https://blog.ovhcloud.com/tag/openapi/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ovhcloud.com/tag/openapi/</link>
	<description>Innovation for Freedom</description>
	<lastBuildDate>Fri, 05 Feb 2021 16:20:41 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.ovhcloud.com/wp-content/uploads/2019/07/cropped-cropped-nouveau-logo-ovh-rebranding-32x32.gif</url>
	<title>OpenAPI Archives - OVHcloud Blog</title>
	<link>https://blog.ovhcloud.com/tag/openapi/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenAPI with Python — a state of the art and our latest contribution</title>
		<link>https://blog.ovhcloud.com/openapi-with-python-a-state-of-the-art-and-our-latest-contribution/</link>
		
		<dc:creator><![CDATA[François Magimel]]></dc:creator>
		<pubDate>Fri, 05 Feb 2021 16:20:04 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[APIs]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenAPI]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://www.ovh.com/blog/?p=20595</guid>

					<description><![CDATA[At OVHcloud, we love using and building APIs. And to build good software, the first thing you need to do is look at the state of the art in your domain. As a matter of fact, there are more and more tools available and it&#8217;s often hard to make a choice without comparisons. Maybe you&#8217;ll [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fopenapi-with-python-a-state-of-the-art-and-our-latest-contribution%2F&amp;action_name=OpenAPI%20with%20Python%20%E2%80%94%20a%20state%20of%20the%20art%20and%20our%20latest%20contribution&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<p>At OVHcloud, we love using and building APIs. And to build good software, the first thing you need to do is look at the state of the art in your domain. As a matter of fact, there are more and more tools available and it&#8217;s often hard to make a choice without comparisons. Maybe you&#8217;ll be tempted to build a new module instead of contributing to an existing one. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="537" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0473-1024x537.png" alt="OpenAPI with Python — a state of the art and our latest contribution" class="wp-image-20621" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0473-1024x537.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0473-300x157.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0473-768x403.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0473.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>We have just open-sourced a Python module, <a href="https://github.com/ovh/python-apispec-fromfile" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">apispec-fromfile</a>, to simplify the usage of OpenAPI in Python by  importing <a href="https://github.com/OAI/OpenAPI-Specification" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenAPI specifications</a>  from files. And to better explain why we do it, here you have a state of the art about OpenAPI with Python (and more specifically with <a href="https://flask.palletsprojects.com" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Flask</a>).</p>



<h2 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-WhatisOpenAPI?">What is OpenAPI?</h2>



<p>As you can read on the official website, the <a href="https://swagger.io/resources/open-api/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">OpenAPI Specification</a> is &#8220;a broadly adopted industry standard for describing modern APIs”. This standard, formerly named <a href="https://swagger.io/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">Swagger</a>, is used to describe, produce, consume, and&nbsp;visualize APIs in a vendor neutral format. This format is based on JSON Schema and specification files can be either in YAML or JSON format.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0471-1024x149.png" alt="Swagger &amp; OpenAPI Initiative" class="wp-image-20620" width="512" height="75" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0471-1024x149.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0471-300x44.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0471-768x112.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0471.png 1314w" sizes="(max-width: 512px) 100vw, 512px" /></figure></div>



<p>Nowadays, there are two versions in the wild: 2 and 3. Version 2 is the Swagger specification and is quite common thanks to the many tools available. Version 3 is the latest one, the first one from the <a href="https://www.openapis.org/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenAPI Initiative (OAI)</a>.</p>



<pre title="OpenAPI Specification example" class="wp-block-code"><code lang="yaml" class="language-yaml line-numbers"><code>openapi:</code> <code>3.0.3</code>
<code>info:</code>
  <code>title:</code> <code>My Cutie Marks Catalog</code>
  <code>description:</code> <code>This is a sample server for a cutie marks catalog.</code>
  <code>termsOfService:</code> <code>http://example.com/terms/</code>
  <code>contact:</code>
    <code>name:</code> <code>API Support</code>
    <code>url:</code> <code>http://www.example.com/support</code>
    <code>email:</code> <code>support@example.com</code>
  <code>license:</code>
    <code>name:</code> <code>Apache 2.0</code>
    <code>url:</code> <code>https://www.apache.org/licenses/LICENSE-2.0.html</code>
  <code>version:</code> <code>1.0.1</code></code></pre>



<p><em>Related links:</em></p>



<ul class="wp-block-list"><li><a href="https://en.wikipedia.org/wiki/OpenAPI_Specification" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenAPI Specification (Wikipédia)</a></li><li><a href="https://www.openapis.org" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenAPI Initiative website</a></li><li><a href="https://rapidapi.com/blog/api-glossary/openapi/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">What is OpenAPI?</a></li></ul>



<h2 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-Whywouldyouuseit?">Why would you use it?</h2>



<p>Well, there are two main purposes:</p>



<ul class="wp-block-list"><li>to describe your API, with nice documentation (and potentially try your endpoints with it directly)</li><li>to generate your API.</li></ul>



<p>Moreover, you will want to use the latest version of the OpenAPI Specification to take advantage of the new features: the version 3.</p>



<p><em>Related links:</em></p>



<ul class="wp-block-list"><li><a href="https://doi.org/10.1145/3184558.3188740" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">The Exploitation of OpenAPI Documentation for the Generation of Web Frontends</a></li><li><a href="https://stoplight.io/blog/difference-between-open-v2-v3-v31/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">What&#8217;s the Difference Between OpenAPI 2.0, 3.0, and 3.1?</a></li></ul>



<h2 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-Scenarios">Scenarios</h2>



<p>When you want to use OpenAPI Specification,&nbsp;you will fall into one of these three scenarios:</p>



<ul class="wp-block-list"><li>Contract-first driven API: when you start from the specification and get an API as a result</li><li>Server-first driven API: when you start from an existing or a new API and get the specification as a result</li><li>Legacy API: when you already have an API and want the OpenAPI Specification.</li></ul>



<p>In the first case, you can choose the technology you will build your API with. Many tools allow you to generate your API quickly and easily, like Swagger tools (<a href="https://swagger.io/tools/swagger-codegen/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">codegen</a>, <a href="https://swagger.io/tools/swagger-editor/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">editor</a>). The Swagger Editor even encourages you to use specific technologies to start your project with, like <a href="https://connexion.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Connexion</a> in Python. This is the more convenient way of generating an API with OpenAPI Specification.</p>



<p>In the second case, you have two possibilities:</p>



<ul class="wp-block-list"><li>starting from scratch: you can choose a technology that can generate the OpenAPI Specification</li><li>using a legacy API: you may need to adapt your code to generate the OpenAPI Specification.</li></ul>



<p>In the third case: no generation, no choice of technology, you just have to write your specification manually. 🎈<em>Easy peasy, puddin&#8217; in the freezy</em> 🎈 🎊 🧁 🐊.</p>



<p>So, two things need to be clarified when you are using Python and Flask for your API:</p>



<ul class="wp-block-list"><li>which technology to build your new API with, in order to to generate your OpenAPI Specification</li><li>which technology to generate your OpenAPI Specification with, from a legacy API.</li></ul>



<p>Here is a graph to help us to answer to those questions:</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0478-1024x331.png" alt="API code (→ specification file) → documentation / Swagger UI" class="wp-image-20636" width="768" height="248" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0478-1024x331.png 1024w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0478-300x97.png 300w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0478-768x248.png 768w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0478.png 1166w" sizes="(max-width: 768px) 100vw, 768px" /></figure></div>



<p><em>Related links:</em></p>



<ul class="wp-block-list"><li><a href="https://www.openapis.org/blog/2017/09/26/three-common-scenarios-for-leveraging-the-openapi-specification" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Three common scenarios for leveraging the OpenAPI Specification</a></li><li><a href="https://engineering.zalando.com/posts/2016/12/crafting-effective-microservices-in-python.html" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Crafting Effective Micro-services in Python</a></li><li><a href="https://openapi.tools" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">OpenAPI Tooling</a></li><li><a href="https://swagger.io/tools/open-source/open-source-integrations/#python" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Swagger tools and integration (Python)</a></li></ul>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-Pythoncodetospecificationfile">Python code to specification file</h3>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0474.png" alt="marshmallow" class="wp-image-20622" width="124" height="114" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0474.png 348w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0474-300x277.png 300w" sizes="auto, (max-width: 124px) 100vw, 124px" /></figure></div>



<p>To get the specification file from your code, you would probably want to use docstrings. Then, one solution is to use the <a href="https://apispec.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">apispec library</a> with <a href="https://github.com/marshmallow-code/apispec/wiki/Ecosystem" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">its ecosystem</a>. It is a pluggable API specification generator with built-in support for <a href="https://marshmallow.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">marshmallow</a>. And if you are using <a href="https://github.com/alecthomas/voluptuous" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Voluptuous</a>, you can use that too <img decoding="async" src="https://docs.dsi.ovh/s/5j7bf9/8401/704793d6038510d343805f57baea5ca16b469eae/_/images/icons/emoticons/wink.svg" alt="(clin d'œil)">. And it supports OAS v2 and v3!</p>



<pre title="apispec example" class="wp-block-code"><code lang="python" class="language-python line-numbers"><code>from</code> <code>apispec import</code> <code>APISpec</code>
<code>from</code> <code>apispec_fromfile import</code> <code>FromFilePlugin</code>
&nbsp;
&nbsp;
<code># Create an APISpec</code>
<code>spec =</code> <code>APISpec(</code>
    <code>title="My Cutie Marks Catalog",</code>
    <code>version="1.0.1",</code>
    <code>openapi_version="3.0.3",</code>
    <code>plugins=[FromFilePlugin("resource")],</code>
<code>)</code>
<code>print(spec.to_yaml())</code></code></pre>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0470.png" alt="Flask" class="wp-image-20626" width="250" height="125" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0470.png 499w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0470-300x150.png 300w" sizes="auto, (max-width: 250px) 100vw, 250px" /></figure></div>



<p>You can use it directly, with its <a href="https://github.com/marshmallow-code/apispec-webframeworks" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">web frameworks plugin</a> and its other plugins. Or you can use Flask extensions.<br>Some frameworks are based on this library to do more things easily (and then support OAS v2 and v3):</p>



<ul class="wp-block-list"><li><a href="https://github.com/marshmallow-code/flask-smorest" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-smorest</a>: based on apispec and marshmallow, use decorators a lot</li><li><a href="https://github.com/jmcarp/flask-apispec" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-apispec</a>: same as flask-smorest, inspired by Flask-RESTful.</li></ul>



<p>Other frameworks are not (totally) based on it, and they often support the OpenAPI Specification v2 :</p>



<ul class="wp-block-list"><li>f<a href="https://github.com/gangverk/flask-swagger" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">lask-swagger</a> (OAS v2): as said in its description, it is &#8220;a Swagger 2.0 specification extractor for Flask&#8221;, compatible with Flask-RESTful</li><li><a href="https://github.com/flasgger/flasgger" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flasgger</a> (OAS v2 &amp; v3): a complete fork of flask-swagger, compatible with apispec, with experimental support for OpenAPI v3.</li></ul>



<p><br>At OVHcloud, some of our APIs are using apispec with our new plugin apispec-fromfile, to avoid putting YAML into docstrings.</p>



<pre title="apispec-fromfile example" class="wp-block-code"><code lang="python" class="language-python line-numbers"><code>from</code> <code>apispec_fromfile import</code> <code>from_file</code>
<code>from</code> <code>extensions import</code> <code>spec</code>
&nbsp;
&nbsp;
<code># Create an endpoint</code>
<code>@from_file("my/spec/file.yml")</code>
<code>def</code> <code>hello():</code>
<code>return</code> <code>{"hello"}</code>
&nbsp;
<code># Register entities and paths</code>
<code>spec.path(resource=hello)</code></code></pre>



<p><em>Related links:</em></p>



<ul class="wp-block-list"><li><a href="https://dev.to/djiit/documenting-your-flask-powered-api-like-a-boss-9eo" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Documenting your Flask-powered API like a boss</a></li><li><a href="https://medium.com/analytics-vidhya/flasgger-an-api-playground-with-flask-and-swagger-ui-6b6806cf8884" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Flasgger — an API playground with Flask and Swagger UI</a></li></ul>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-Specificationfiletodocumentation">Specification file to documentation</h3>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0475.png" alt="sphynx" class="wp-image-20624" width="288" height="80" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0475.png 575w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0475-300x83.png 300w" sizes="auto, (max-width: 288px) 100vw, 288px" /></figure></div>



<p>Now that you have your specification file, in JSON or YAML format, you want to use it to describe your API. One way is to use Sphinx to generate a documentation in Python. Those extensions will help you to do that:</p>



<ul class="wp-block-list"><li><a href="https://sphinxcontrib-openapi.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">sphinxcontrib-openapi</a>: this is using&nbsp;<a href="https://sphinxcontrib-httpdomain.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">sphinxcontrib-httpdomain</a> to generate a static page</li><li><a href="https://sphinxcontrib-redoc.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">sphinxcontrib-redoc</a>: this is using <a href="https://redocly.github.io/redoc/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">ReDoc</a> to generate a more dynamic page.</li></ul>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-SpecificationfiletoSwaggerUI">Specification file to Swagger UI</h3>



<p>Another cool thing you can do with your specification file is to expose your API over the <a href="https://swagger.io/tools/swagger-ui/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Swagger UI</a>. This can even be used as a quick dynamic documentation. To do that, you can either spawn a Swagger UI in a container (you may need to expose your specification file) or if you are using one of the following frameworks, it is already embedded:</p>



<ul class="wp-block-list"><li><a href="https://github.com/sveint/flask-swagger-ui" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-swagger-ui</a></li><li><a href="https://github.com/marshmallow-code/flask-smorest" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-smorest</a></li><li><a href="https://github.com/jmcarp/flask-apispec" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-apispec</a>.</li></ul>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-PythoncodetoSwaggerUI">Python code to Swagger UI</h3>



<p>If you choose to start with a framework, some of them can do all the graph traversal and expose an endpoint to a Swagger UI:</p>



<ul class="wp-block-list"><li><a href="https://github.com/marshmallow-code/flask-smorest" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-smorest</a></li><li><a href="https://github.com/jmcarp/flask-apispec" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-apispec</a></li><li><a href="https://connexion.readthedocs.io" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">Connexion</a>.</li></ul>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-WhichtooldoIneedto^WcanIuse?">Which tool can I use?</h3>



<p>After all this reading, you may wonder which tool to use. Let&#8217;s complete the three scenarios, with some suggestions:</p>



<div class="wp-block-image"><figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" src="https://www.ovh.com/blog/wp-content/uploads/2021/02/IMG_0469.png" alt="Swagger" class="wp-image-20627" width="290" height="90" srcset="https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0469.png 580w, https://blog.ovhcloud.com/wp-content/uploads/2021/02/IMG_0469-300x93.png 300w" sizes="auto, (max-width: 290px) 100vw, 290px" /></figure></div>



<ul class="wp-block-list"><li>Contract-first driven API: you can use Connexion (Swagger Editor is using it to generate Python code) or another framework</li><li>Server-first driven API: you can either start with a framework (for example flask-smorest) or complete your code with apispec or flasgger</li><li>Legacy API: you can complete your code with apispec or flasgger.</li></ul>



<p>And for the documentation, you can use Swagger UI and / or ReDoc.</p>



<p>One thing you need to pay attention to is the version of the OpenAPI Specification. It could be a good thing to start with the latest version (v3).</p>



<h3 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-WhatisourPythonmodulefor:apispec-fromfile?">What is our Python module for: apispec-fromfile?</h3>



<p>For one our API, we were in the &#8220;server-first driven API&#8221; scenario, with an existing API based on Voluptuous and Flask. We wanted to generate the OpenAPI Specification version 3 and documentation from the code, even if we needed to adapt the code a bit.</p>



<p>Flasgger were a good starting point, with its decorator, but the support of apispec is still experimental and we are not using Marshmallow. The flask-swagger library uses a keyword in docstrings to import specification files for each endpoint, but it only supports OpenAPI v2.</p>



<p>Therefore, we kept the idea of using a decorator instead of putting YAML into docstrings, and we built an apispec plugin, which supports OpenAPI v2 and v3: <a href="https://github.com/ovh/python-apispec-fromfile/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">https://github.com/ovh/python-apispec-fromfile</a> ✨ 🍰 🎉. Then we just have to write small specification files gradually, and add a decorator to our functions.</p>



<h2 class="wp-block-heading" id="Stateoftheart:OpenAPIwithPython-Relatedlinks">Related links</h2>



<ul class="wp-block-list"><li><a href="https://github.com/p1c2u/openapi-core" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">openapi-core</a>: validation plugin</li><li><a href="https://github.com/Yelp/bravado-core" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">bravado-core</a>: same as openapi-core (openapi v2)</li><li><a href="https://github.com/mzaglia/flask-redoc" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer">flask-redoc</a>: A Flask extension for displaying OpenAPI/Swagger documentation using Redoc.</li></ul>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fopenapi-with-python-a-state-of-the-art-and-our-latest-contribution%2F&amp;action_name=OpenAPI%20with%20Python%20%E2%80%94%20a%20state%20of%20the%20art%20and%20our%20latest%20contribution&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
