Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

549
Views
Flask: ¿cómo automatizar la documentación de OpenAPI v3?

Necesito documentar una API escrita en Flask 2 puro y estoy buscando un enfoque consolidado para hacerlo. Encontré diferentes soluciones viables, pero como soy nuevo en Python y Flask, no puedo elegir entre ellas. Las soluciones que encontré son:

  • https://github.com/marshmallow-code/apispec
  • https://github.com/jmcarp/flask-apispec
  • https://github.com/marshmallow-code/flask-smorest

Para separar los diferentes puntos finales de la API, utilizo el modelo Flask. La estructura de un MWE es la siguiente:

Estructura del proyecto

Primero definí dos objetos de dominio simples, Autor y Libro .

 # author.py class Author: def __init__(self, id: str, name: str): self.id = id self.name = name # book.py class Book: def __init__(self, id: str, name: str): self.id = id self.name = name

Luego, creé un punto final GET simple para ambos usando dos planos separados.

 # author_apy.py import json from flask import Blueprint, Response from domain.author import Author author = Blueprint("author", __name__, url_prefix="/authors") @author.get("/") def authors(): authors: list[Author] = [] for i in range(10): author: Author = Author(str(i), "Author " + str(i)) authors.append(author) authors_dicts = [author.__dict__ for author in authors] return Response(json.dumps(authors_dicts), mimetype="application/json")

y

 # book_api.json import json from flask import Blueprint, Response from domain.book import Book book = Blueprint("book", __name__, url_prefix="/books") @book.get("/") def books(): books: list[Book] = [] for i in range(10): book: Book = Book(str(i), "Book " + str(i)) books.append(book) books_dicts = [book.__dict__ for book in books] return Response(json.dumps(books_dicts), mimetype="application/json")

Al final, simplemente registré ambos planos en la aplicación Flask.

 # app.py from flask import Flask from api.author.author_api import author from api.book.book_api import book app = Flask(__name__) app.register_blueprint(author, url_prefix="/authors") app.register_blueprint(book, url_prefix="/books") @app.get('/') def hello_world(): return 'Flask - OpenAPI' if __name__ == '__main__': app.run()

El código fuente completo también está disponible en GitHub .

Teniendo en cuenta este ejemplo de trabajo mínimo, me gustaría saber cuál es la forma más rápida de automatizar la generación de un archivo OpenAPI v3 yaml/JSON, por ejemplo, expuesto en un punto final /api-doc.yaml.

PD: esta es mi primera API usando Python y Flask. Estoy tratando de reproducir lo que puedo hacer con Spring-Boot y SpringDoc

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Lo animo a cambiar su proyecto a FastAPI, no es muy diferente o más difícil que Flask.

Documentos de FastAPI sobre la generación de esquemas de OpenAPI

No solo le permitirá generar documentos/especificaciones de OpenAPI fácilmente. Además es asíncrono, mucho más rápido y moderno.

Consulte también Alternativas, inspiración y comparaciones de FastAPI para leer sobre las diferencias.

Especialmente esta cita del enlace anterior debería explicar por qué hacer lo que intenta hacer puede no ser la mejor idea:

Marcos Flask REST

Hay varios marcos Flask REST, pero después de invertir tiempo y trabajo en investigarlos, descubrí que muchos están descontinuados o abandonados, con varios problemas permanentes que los hicieron inadecuados.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!