Swaggerui、Redoc、Rapidoc、Elements、Scalar用の完全にPythonic、Openapiベースのカスタマイズ可能なドキュメントページ。
このパッケージはOpenapi仕様を生成せず、指定された構成でページをレンダリングするだけです。
gimme openapiスペック、残りを私に残してください...
| ドキュメント | ページ | config |
|---|---|---|
| swaggerui | ✅ | ✔✔️ |
| redoc | ✅ | ✔✔️ |
| Rapidoc | ✅ | ✔✔️ |
| 要素 | ✅ | ✔✔️ |
| スカラー | ✅ | ✔✔️ |
絵文字キー:
| 絵文字 | 意味 |
|---|---|
| ✅ | 準備ができて |
| ✔✔️ | 部分的に |
| 失敗した | |
| ? | 進行中 |
| ? | 保留中 |
| わからない |
pip install openapipages 私はそれが少しボイラープレートに見えることを知っていますが、それはすべて簡単です。 .render()メソッドは、htmlを文字列として返します。このデザインのおかげで、希望どおりにページを拡張および構成できます(たとえば、ページへのアクセスを制限するために追加のロジックを追加します)。
include_in_schemaパラメーターは、各エンドポイントでFalseに設定されており、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 ()
include_in_schemaパラメーターは、各エンドポイントでFalseに設定されており、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-私はそれを二度とコピーして貼り付けたくありません...
いくつかのAPIドキュメントツールは、標準インターフェイスを使用して指先で使用できます。
あるプロジェクトから別のプロジェクトに同じものをコピーして貼り付けることはもうありません。パッケージをインポートして使用してください!
Fastapi Repoへのプルリクエストは次のとおりです。これは、構成が制限されていて、変わらないと理解したポイントでした...
また、このPRに対する著者の答えは、将来、より多くの代替ドキュメントツールが表示されないことを示しています。
Fastapi Repoに作成された別のプルリクエストを次に示します。 Scalarのサポートをもたらしますが、まだ承認/マージされていないので、以前のPRのおかげでそのままになると思います。
構成機能を備えた多くのAPIドキュメントインターフェイスの標準インターフェイス。
最近、PythonコミュニティでOpenapi Specベースのドキュメントツールが人気を博しています。多くのプロジェクト(Fastapi、Litestar、Apispec、Flasgger、Spectree、Connexionなど)が箱から出してOpenapi仕様のサポートを提供しています。
LitestarはSwaggerui、Redoc、Rapidoc、およびElementsをサポートしており、FastapiはSwaggeruiとRedocをサポートしていますが、次は何ですか?次のもので十分でしょうか?
それらはすべて、1つの共通点、指定された構成でテンプレートされたHTML(Python文字列またはファイルとして)を持っています。
私がどこに行くのかわかりますか?
openapipages Openapi SpecベースのドキュメントツールのSQLalchemyにしたいと思います。
多くの人のための1つのインターフェイス!そしてもちろん、フレームワーク不可知論者...だから、Fastapi、Litestarプロジェクト、またはOpenapi仕様を生成するその他のプロジェクトで使用できます。
FastapiとLitestarのプロジェクトと上記の2つのプルリクエストは、このパッケージを作成するように促しました。
openapipages 、MITライセンスの条件の下で配布されます。