<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mr Fatalyst</title>
    <description>The latest articles on DEV Community by Mr Fatalyst (@mr_fatalyst).</description>
    <link>https://dev.to/mr_fatalyst</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2964117%2Fbd9a3202-0d98-4bfe-b89f-367349b2bf91.jpg</url>
      <title>DEV Community: Mr Fatalyst</title>
      <link>https://dev.to/mr_fatalyst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mr_fatalyst"/>
    <language>en</language>
    <item>
      <title>FastOpenAPI: A Reason to Believe in Open Source Community</title>
      <dc:creator>Mr Fatalyst</dc:creator>
      <pubDate>Fri, 18 Apr 2025 14:07:35 +0000</pubDate>
      <link>https://dev.to/mr_fatalyst/fastopenapi-a-reason-to-believe-in-open-source-community-22k</link>
      <guid>https://dev.to/mr_fatalyst/fastopenapi-a-reason-to-believe-in-open-source-community-22k</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl7ea2n6pqpowkfn2wdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjl7ea2n6pqpowkfn2wdg.png" alt="FastOpenAPI" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Documentation: &lt;a href="https://fastopenapi.fatalyst.dev/" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/mr-fatalyst/fastopenapi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PyPi: &lt;a href="https://pypi.org/project/fastopenapi/" rel="noopener noreferrer"&gt;FastOpenAPI&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;About a month ago, I decided to share my project, &lt;strong&gt;FastOpenAPI&lt;/strong&gt;, with the Hacker News community. &lt;strong&gt;FastOpenAPI&lt;/strong&gt; is a library designed to simplify working with OpenAPI schemas and integrating them with various Python frameworks. My goal was to create a user-friendly solution, inspired by FastAPI, for developers using Falcon, AioHTTP, Tornado, and other popular frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did I create FastOpenAPI?
&lt;/h2&gt;

&lt;p&gt;If you've ever had to maintain API documentation for multiple Python frameworks simultaneously, you know how cumbersome it can be. Each framework often requires a unique approach. Appreciating FastAPI’s simplicity and intuitive design, I wanted to bring that same convenience and efficiency to other platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does FastOpenAPI work?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FastOpenAPI&lt;/strong&gt; acts as a universal layer providing consistent creation and validation of OpenAPI schemas across multiple frameworks. It implements a unified interface alongside tools to streamline integration, documentation, and data validation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz61g4hbsz89zptjve2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz61g4hbsz89zptjve2y.png" alt="Request processing flow in FastOpenAPI" width="800" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Request processing flow in FastOpenAPI:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Receiving Request
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The client sends an HTTP request to a specific route.&lt;/li&gt;
&lt;li&gt;The web framework (Flask, Falcon, AioHTTP, Starlette, Sanic, Quart, Tornado) receives the request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Forwarding Request
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The framework delegates the request to the handler registered by FastOpenAPI.&lt;/li&gt;
&lt;li&gt;The router extracts URL path parameters, query parameters, and the request body (JSON).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Validating Data
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The router analyzes the signature of the user-defined function.&lt;/li&gt;
&lt;li&gt;Input data is transformed based on type annotations.&lt;/li&gt;
&lt;li&gt;Pydantic models (if used) are validated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Calling User Function
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The router passes validated arguments to the user-defined function, supporting synchronous and asynchronous operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Handling Result
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The function returns a result.&lt;/li&gt;
&lt;li&gt;The router serializes the result, especially for Pydantic models, and adds metadata like HTTP status codes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Forming Response
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;The router converts the serialized result into a format compatible with the specific framework.&lt;/li&gt;
&lt;li&gt;The framework sends back an HTTP response.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Handling Errors
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Any exceptions are caught by the router.&lt;/li&gt;
&lt;li&gt;Errors are standardized into a JSON response with an appropriate HTTP status code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  This architecture provides:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Consistent route definitions across frameworks.&lt;/li&gt;
&lt;li&gt;Automatic validation and transformation of data.&lt;/li&gt;
&lt;li&gt;Standardized error handling.&lt;/li&gt;
&lt;li&gt;Automatic OpenAPI documentation generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core of &lt;strong&gt;FastOpenAPI&lt;/strong&gt; allows developers to concentrate on business logic instead of worrying about integration specifics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Feedback and Improvements
&lt;/h2&gt;

&lt;p&gt;I shared &lt;strong&gt;FastOpenAPI&lt;/strong&gt; on Hacker News to get constructive criticism and recommendations, a platform known for its candid and professional audience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuq43wv0v785txc463wzt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuq43wv0v785txc463wzt.png" alt="Hacker News activity chart" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My post received a very positive response: it remained on the front page for over 12 hours, garnered approximately 150 upvotes, and sparked valuable discussions. The community suggested essential improvements, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class-level schema caching for better performance.&lt;/li&gt;
&lt;li&gt;Standardized error handling.&lt;/li&gt;
&lt;li&gt;Support for basic Python data types as response models.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Version 0.5.0 – A Major Milestone
&lt;/h2&gt;

&lt;p&gt;Thanks to community feedback, version 0.5.0 featured highly anticipated enhancements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integration with AioHTTP.&lt;/li&gt;
&lt;li&gt;Implementation of class-level schema caching.&lt;/li&gt;
&lt;li&gt;Improved error handling mechanisms.&lt;/li&gt;
&lt;li&gt;Support for simple data types as response models.&lt;/li&gt;
&lt;li&gt;Comprehensive documentation overhaul (&lt;a href="https://fastopenapi.fatalyst.dev/" rel="noopener noreferrer"&gt;fastopenapi.fatalyst.dev&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A significant pull request also ensured consistent use of aliases from Pydantic during serialization and schema generation.&lt;/p&gt;

&lt;p&gt;The community response surpassed my expectations, providing actionable suggestions and motivating further project development.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;Future releases will focus on simplifying the API, removing deprecated solutions, enhancing performance, and expanding framework support. Continuous documentation improvements and more usage examples will remain a priority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;I'm incredibly grateful to everyone who participated in discussions on Hacker News and other platforms. Your valuable contributions have significantly improved &lt;strong&gt;FastOpenAPI&lt;/strong&gt;, reinforcing my belief in the strength and future of open source communities!&lt;/p&gt;

</description>
      <category>python</category>
      <category>openapi</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>FastOpenAPI: Generate OpenAPI Schemas for Any Python Framework</title>
      <dc:creator>Mr Fatalyst</dc:creator>
      <pubDate>Sat, 22 Mar 2025 10:53:51 +0000</pubDate>
      <link>https://dev.to/mr_fatalyst/fastopenapi-generate-openapi-schemas-for-any-python-framework-4n9i</link>
      <guid>https://dev.to/mr_fatalyst/fastopenapi-generate-openapi-schemas-for-any-python-framework-4n9i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42l0hwg0vve14ta5itgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42l0hwg0vve14ta5itgu.png" alt="FastOpenAPI logo" width="800" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developing APIs is a crucial part of modern software projects, and OpenAPI is the de facto standard for documenting APIs. While FastAPI seamlessly integrates OpenAPI schema generation and documentation, what if you prefer using frameworks like Flask, Falcon, Sanic, or others? FastOpenAPI addresses exactly this need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is FastOpenAPI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FastOpenAPI is a Python library inspired by FastAPI and built upon Pydantic v2, designed to simplify the generation and integration of OpenAPI schemas with virtually any popular Python framework. Importantly, FastOpenAPI uses "proxy routing": you write routes in a FastAPI-like style, and FastOpenAPI automatically registers them with your chosen framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for Falcon, Flask, Quart, Sanic, Starlette, Tornado.&lt;/li&gt;
&lt;li&gt;Proxy routing with automatic registration.&lt;/li&gt;
&lt;li&gt;Convenient FastAPI-style API.&lt;/li&gt;
&lt;li&gt;Automatic documentation generation (Swagger UI, ReDoc).&lt;/li&gt;
&lt;li&gt;Strong data validation and typing via Pydantic v2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How it Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FastOpenAPI employs a system of adapters (routers), each integrating with a specific framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BaseRouter: Contains shared logic for schema and documentation generation.&lt;/li&gt;
&lt;li&gt;Specialized routers (FlaskRouter, SanicRouter, etc.) extend BaseRouter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Minimal Flask API Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask
from pydantic import BaseModel

from fastopenapi.routers import FlaskRouter

app = Flask(__name__)
router = FlaskRouter(app)

class UserResponse(BaseModel):
    username: str

@router.get("/user", tags=["User"], response_model=UserResponse)
def get_user(username: str):
    return UserResponse(username=username)

if __name__ == "__main__":
    app.run(port=8000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Go to &lt;code&gt;http://localhost:8000/docs&lt;/code&gt; to see swagger for example.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g9nvupobw74kuowi2bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g9nvupobw74kuowi2bd.png" alt="Example Swagger" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try it:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2zd9hfkcgih577wbjv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2zd9hfkcgih577wbjv1.png" alt="Example Swagger Request" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Router Composition&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FastOpenAPI supports convenient API structuring through router composition, similar to APIRouter in FastAPI. For example, creating versioned APIs:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from flask import Flask
from pydantic import BaseModel

from fastopenapi.routers import FlaskRouter


app = Flask(__name__)
main_router = FlaskRouter(app)

api_v1 = FlaskRouter()
api_v2 = FlaskRouter()

class UserResponse(BaseModel):
    username: str
    version: str

class UserResponseV2(BaseModel):
    login: str
    version: str

@api_v1.get("/items", tags=["Users", "v1"], response_model=UserResponse)
def items_v1(name: str):
    return UserResponse(username=name, version="1.0")

@api_v2.get("/items", tags=["Users", "v2"], response_model=UserResponseV2)
def items_v2(name):
    return UserResponseV2(login=name, version="2.0")

main_router.include_router(api_v1, prefix="/api/v1")
main_router.include_router(api_v2, prefix="/api/v2")

if __name__ == "__main__":
    app.run(port=8000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Go to &lt;code&gt;http://localhost:8000/docs&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjdo6n0r51qwyvln1zyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjdo6n0r51qwyvln1zyt.png" alt="Example 2 Swagger" width="800" height="467"&gt;&lt;/a&gt;&lt;br&gt;
If you prefer ReDoc, you can go to &lt;code&gt;http://localhost:8000/redoc&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq22hqugtvqfstj8onfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq22hqugtvqfstj8onfv.png" alt="Image description" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generated Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the server is running, documentation is automatically available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Swagger UI: &lt;a href="http://localhost:8000/docs" rel="noopener noreferrer"&gt;http://localhost:8000/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ReDoc: &lt;a href="http://localhost:8000/redoc" rel="noopener noreferrer"&gt;http://localhost:8000/redoc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAPI JSON: &lt;a href="http://localhost:8000/openapi.json" rel="noopener noreferrer"&gt;http://localhost:8000/openapi.json&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Considerations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project's repository includes basic benchmarks showing that FastOpenAPI introduces only a modest overhead (approximately 2-5%), which is a small price to pay for robust data validation and automatic documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who Should Use FastOpenAPI?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers wanting OpenAPI support without migrating from their preferred framework.&lt;/li&gt;
&lt;li&gt;Teams using multiple frameworks seeking standardized API documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Installation and Usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# Choose installation based on your preferred framework&lt;br&gt;
pip install fastopenapi[falcon]&lt;br&gt;
pip install fastopenapi[flask]&lt;br&gt;
pip install fastopenapi[sanic]&lt;br&gt;
pip install fastopenapi[starlette]&lt;br&gt;
pip install fastopenapi[tornado]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FastOpenAPI is an open-source library that simplifies the addition of OpenAPI specifications to existing Python projects across various frameworks, offering a balance of convenience, flexibility, and performance.&lt;/p&gt;

&lt;p&gt;Project Repository: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mr-fatalyst" rel="noopener noreferrer"&gt;
        mr-fatalyst
      &lt;/a&gt; / &lt;a href="https://github.com/mr-fatalyst/fastopenapi" rel="noopener noreferrer"&gt;
        fastopenapi
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      FastOpenAPI is a library for generating and integrating OpenAPI schemas using Pydantic v2 and various frameworks (AioHttp, Falcon, Flask, Quart, Sanic, Starlette, Tornado).
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/mr-fatalyst/fastopenapi/master/logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmr-fatalyst%2Ffastopenapi%2Fmaster%2Flogo.png" alt="Logo"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;b&gt;FastOpenAPI&lt;/b&gt; is a library for generating and integrating OpenAPI schemas using Pydantic and various frameworks
&lt;/p&gt;
&lt;p&gt;
  This project was inspired by &lt;a href="https://fastapi.tiangolo.com/" rel="nofollow noopener noreferrer"&gt;FastAPI&lt;/a&gt; and aims to provide a similar developer-friendly experience
&lt;/p&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/95207bc5a4752edda90d15266a572544a3dbb84deb37be8db3f51ec6a8b7d47a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d722d666174616c7973742f666173746f70656e617069"&gt;&lt;img src="https://camo.githubusercontent.com/95207bc5a4752edda90d15266a572544a3dbb84deb37be8db3f51ec6a8b7d47a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d722d666174616c7973742f666173746f70656e617069"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/mr-fatalyst/fastopenapi/actions/workflows/master.yml/badge.svg"&gt;&lt;img src="https://github.com/mr-fatalyst/fastopenapi/actions/workflows/master.yml/badge.svg"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5c66ef23261df1a6bde8781d2cf6f4d04e2fbd46e5776cab7b6ffb384f83f4ff/68747470733a2f2f636f6465636f762e696f2f67682f6d722d666174616c7973742f666173746f70656e6170692f6272616e63682f6d61737465722f67726170682f62616467652e7376673f746f6b656e3d55534852314930434a42"&gt;&lt;img src="https://camo.githubusercontent.com/5c66ef23261df1a6bde8781d2cf6f4d04e2fbd46e5776cab7b6ffb384f83f4ff/68747470733a2f2f636f6465636f762e696f2f67682f6d722d666174616c7973742f666173746f70656e6170692f6272616e63682f6d61737465722f67726170682f62616467652e7376673f746f6b656e3d55534852314930434a42"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/59e6735443dc41ae21b13a0392b65b11928e6f239981db11985ca745ab0c23b9/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f666173746f70656e617069"&gt;&lt;img src="https://camo.githubusercontent.com/59e6735443dc41ae21b13a0392b65b11928e6f239981db11985ca745ab0c23b9/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f666173746f70656e617069"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a8e0850dc525c2d40b3cf3ba469031461d1cc9f23f40f2d79f3df0c5d9674709/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f666173746f70656e617069"&gt;&lt;img src="https://camo.githubusercontent.com/a8e0850dc525c2d40b3cf3ba469031461d1cc9f23f40f2d79f3df0c5d9674709/68747470733a2f2f696d672e736869656c64732e696f2f707970692f707976657273696f6e732f666173746f70656e617069"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/37049c06136b234af5254472216d00bb66a6e2436a06246a0036e2ef25f75da2/68747470733a2f2f7374617469632e706570792e746563682f62616467652f666173746f70656e617069"&gt;&lt;img src="https://camo.githubusercontent.com/37049c06136b234af5254472216d00bb66a6e2436a06246a0036e2ef25f75da2/68747470733a2f2f7374617469632e706570792e746563682f62616467652f666173746f70656e617069" alt="PyPI Downloads"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📦 Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Install only FastOpenAPI:&lt;/h4&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Install FastOpenAPI with a specific framework:&lt;/h4&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[aiohttp]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[falcon]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[flask]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[quart]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[sanic]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[starlette]&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install fastopenapi[tornado]&lt;/pre&gt;

&lt;/div&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Quick Start&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Step 1. Create an application&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Create the &lt;code&gt;main.py&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Copy the code from an example&lt;/li&gt;
&lt;li&gt;For some examples uvicorn is required (&lt;code&gt;pip install uvicorn&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Examples:&lt;/h4&gt;

&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/cdb82310ae99a4f8d110a54b61b09d09ad4f9ae353b24f7692c690d0ca13012c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41696f487474702d3030373844373f7374796c653d666c6174266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/cdb82310ae99a4f8d110a54b61b09d09ad4f9ae353b24f7692c690d0ca13012c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f41696f487474702d3030373844373f7374796c653d666c6174266c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="AIOHTTP"&gt;&lt;/a&gt;&lt;/p&gt;


  Click to expand the Falcon Example
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;aiohttp&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s1"&gt;web&lt;/span&gt;
&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;pydantic&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;BaseModel&lt;/span&gt;
&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;fastopenapi&lt;/span&gt;.&lt;span class="pl-s1"&gt;routers&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;AioHttpRouter&lt;/span&gt;

&lt;span class="pl-s1"&gt;app&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;web&lt;/span&gt;.&lt;span class="pl-c1"&gt;Application&lt;/span&gt;()
&lt;span class="pl-s1"&gt;router&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;AioHttpRouter&lt;/span&gt;(&lt;span class="pl-s1"&gt;app&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-s1"&gt;app&lt;/span&gt;)


&lt;span class="pl-k"&gt;class&lt;/span&gt; &lt;span class="pl-v"&gt;HelloResponse&lt;/span&gt;(&lt;span class="pl-v"&gt;BaseModel&lt;/span&gt;):
    &lt;span class="pl-s1"&gt;message&lt;/span&gt;: &lt;span class="pl-smi"&gt;str&lt;/span&gt;


&lt;span class="pl-en"&gt;@&lt;span class="pl-s1"&gt;router&lt;/span&gt;.&lt;span class="pl-c1"&gt;get&lt;/span&gt;(&lt;span class="pl-s"&gt;"/hello"&lt;/span&gt;, &lt;span class="pl-s1"&gt;tags&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;[&lt;span class="pl-s"&gt;"Hello"&lt;/span&gt;], &lt;span class="pl-s1"&gt;status_code&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;


&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mr-fatalyst/fastopenapi" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;em&gt;The project is still evolving, and I’d love any feedback or testing from the community!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>flask</category>
      <category>openapi</category>
    </item>
  </channel>
</rss>
