Halaman dokumentasi yang dapat disesuaikan dengan Pythonic, OpenAPI yang dapat disesuaikan untuk Swaggerui, redoc, rapidoc, elemen, skalar.
Perlu diingat, bahwa paket ini tidak menghasilkan spesifikasi openapi, itu hanya membuat halaman dengan konfigurasi yang diberikan.
Beri aku spesifikasi openapi, serahkan sisanya padaku ...
| Dokumentasi | Halaman | Konfigurasi |
|---|---|---|
| Swaggerui | ✅ | ✔️ |
| Redoc | ✅ | ✔️ |
| Rapidoc | ✅ | ✔️ |
| Elemen | ✅ | ✔️ |
| Skalar | ✅ | ✔️ |
Kunci emoji:
| Emoji | Arti |
|---|---|
| ✅ | Siap |
| ✔️ | Sebagian |
| Gagal | |
| ? | Sedang berlangsung |
| ? | Tertunda |
| Tidak yakin |
pip install openapipages Saya tahu itu terlihat agak boilerplate tapi semuanya lurus ke depan. Metode .render() mengembalikan HTML sebagai string. Berkat desain ini, Anda dapat memperluas dan mengonfigurasi halaman yang Anda inginkan (misalnya menambahkan logika tambahan untuk membatasi akses ke halaman).
Parameter
include_in_schemadiatur keFalsedi setiap titik akhir untuk menghindari termasuk titik akhir ini dalam spesifikasi openapi.
from fastapi import FastAPI
from fastapi . responses import HTMLResponse
from openapipages import Elements , RapiDoc , ReDoc , Scalar , SwaggerUI
# Disable the built-in /redoc page so we can make a custom one.
app = FastAPI ( redoc_url = None )
@ app . get ( "/" )
def root () -> dict [ str , str ]:
return { "Hello" : "World" }
@ app . get ( "/swaggerui" , response_class = HTMLResponse , include_in_schema = False )
def get_swaggerui () -> str :
return SwaggerUI ( title = "Swagger UI" ). render ()
@ app . get ( "/redoc" , response_class = HTMLResponse , include_in_schema = False )
def get_redoc () -> str :
return ReDoc ( title = "ReDoc" ). render ()
@ app . get ( "/scalar" , response_class = HTMLResponse , include_in_schema = False )
def get_scalar () -> str :
return Scalar ( title = "Scalar" ). render ()
@ app . get ( "/elements" , response_class = HTMLResponse , include_in_schema = False )
def get_elements () -> str :
return Elements ( title = "Elements" ). render ()
@ app . get ( "/rapidoc" , response_class = HTMLResponse , include_in_schema = False )
def get_rapidoc () -> str :
return RapiDoc ( title = "RapiDoc" ). render ()Parameter
include_in_schemadiatur keFalsedi setiap titik akhir untuk menghindari termasuk titik akhir ini dalam spesifikasi openapi.
from litestar import Litestar , MediaType , get
from openapipages import Elements , RapiDoc , ReDoc , Scalar , SwaggerUI
openapi_url = "/schema/openapi.json"
@ get ( "/" )
def root () -> dict [ str , str ]:
return { "Hello" : "World" }
@ get ( "/swaggerui" , media_type = MediaType . HTML , include_in_schema = False )
def get_swaggerui () -> str :
return SwaggerUI ( title = "Swagger UI" , openapi_url = openapi_url ). render ()
@ get ( "/redoc" , media_type = MediaType . HTML , include_in_schema = False )
def get_redoc () -> str :
return ReDoc ( title = "ReDoc" , openapi_url = openapi_url ). render ()
@ get ( "/scalar" , media_type = MediaType . HTML , include_in_schema = False )
def get_scalar () -> str :
return Scalar ( title = "Scalar" , openapi_url = openapi_url ). render ()
@ get ( "/elements" , media_type = MediaType . HTML , include_in_schema = False )
def get_elements () -> str :
return Elements ( title = "Elements" , openapi_url = openapi_url ). render ()
@ get ( "/rapidoc" , media_type = MediaType . HTML , include_in_schema = False )
def get_rapidoc () -> str :
return RapiDoc ( title = "RapiDoc" , openapi_url = openapi_url ). render ()
app = Litestar ([ root , get_swaggerui , get_redoc , get_scalar , get_elements , get_rapidoc ])Tl; dr - Saya tidak ingin menyalin dan menempelkannya lagi ...
Beberapa alat dokumentasi API siap digunakan di ujung jari Anda dengan antarmuka standar.
Tidak ada lagi menyalin dan menempelkan hal yang sama dari satu proyek ke proyek lainnya. Impor paket dan gunakan!
Berikut adalah permintaan tarik yang dibuat untuk repo FASTAPI. Inilah titik saya mengerti konfigurasi terbatas dan itu tidak akan berubah ...
Juga, jawaban penulis untuk PR ini menunjukkan bahwa kami tidak akan melihat lebih banyak alat dokumentasi alternatif di masa depan.
Berikut adalah permintaan tarik lain yang dibuat untuk repo Fastapi. Ini membawa dukungan skalar, tetapi belum disetujui/digabungkan dan saya pikir itu akan tetap seperti itu berkat PR sebelumnya.
Antarmuka standar untuk banyak antarmuka dokumentasi API dengan fitur konfigurasi.
Akhir-akhir ini, alat dokumentasi berbasis spesifikasi OpenAPI telah menjadi populer di komunitas Python. Kami melihat banyak proyek (FastAPI, Litestar, APISPEC, Flasgger, Spectree, Connexion, dll) yang menawarkan dukungan untuk spesifikasi OpenAPI di luar kotak.
Litestar memiliki dukungan untuk Swaggerui, Redoc, Rapidoc, dan Elements dan Fastapi mendapat dukungan untuk Swaggerui, dan redoc tetapi apa selanjutnya? Akankah yang berikutnya cukup?
Mereka semua memiliki satu kesamaan, beberapa HTML (sebagai string python atau file) yang di -templated dengan konfigurasi yang diberikan.
Apakah Anda melihat ke mana saya pergi?
Saya ingin openapipages menjadi sqlalchemy dari alat dokumentasi berbasis OpenAPI spec.
Satu antarmuka bagi banyak orang! Dan tentu saja kerangka kerja agnostik ... sehingga Anda dapat menggunakannya di fastapi Anda, proyek litestar, atau proyek lain yang menghasilkan spesifikasi openapi.
Proyek Fastapi dan Litestar dan dua permintaan tarik yang disebutkan di atas menginspirasi saya untuk membuat paket ini.
openapipages didistribusikan berdasarkan ketentuan lisensi MIT.