Pythonic ทั้งหมด, หน้าเอกสารที่ปรับแต่งตาม OpenAPI สำหรับ Swaggerui, redoc, Rapidoc, องค์ประกอบ, สเกลาร์
โปรดทราบว่าแพ็คเกจนี้ไม่ได้สร้างสเป็ค OpenAPI แต่เพียงแค่แสดงหน้าหน้าด้วยการกำหนดค่าที่กำหนด
gimme an openapi spec ทิ้งส่วนที่เหลือไว้ที่ฉัน ...
| เอกสาร | หน้าหนังสือ | การกำหนดค่า |
|---|---|---|
| swaggerui | ||
| ใหม่ | ||
| ราศีพุธ | ||
| องค์ประกอบ | ||
| ตาชั่ง |
Emoji Key:
| อีโมจิ | ความหมาย |
|---|---|
| พร้อม | |
| บางส่วน | |
| ล้มเหลว | |
| - | การดำเนินการ |
| - | รอดำเนินการ |
| ไม่แน่ใจ |
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 นี่คือจุดที่ฉันเข้าใจการกำหนดค่ามี จำกัด และมันจะไม่เปลี่ยนแปลง ...
นอกจากนี้คำตอบของผู้เขียนสำหรับการประชาสัมพันธ์นี้แสดงให้เห็นว่าเราจะไม่เห็นเครื่องมือเอกสารทางเลือกเพิ่มเติมในอนาคต
นี่คือคำขอดึงอีกครั้งที่ทำกับ fastapi repo มันนำมาซึ่งการสนับสนุนสเกลาร์ แต่ยังไม่ได้รับการอนุมัติ/ผสานและฉันคิดว่ามันจะอยู่อย่างนั้นด้วยการประชาสัมพันธ์ก่อนหน้านี้
อินเทอร์เฟซมาตรฐานสำหรับอินเทอร์เฟซเอกสาร API จำนวนมากพร้อมคุณสมบัติการกำหนดค่า
เมื่อเร็ว ๆ นี้เครื่องมือเอกสารที่ใช้ OpenAPI Spec ได้กลายเป็นที่นิยมในชุมชน Python เราเห็นโครงการจำนวนมาก (Fastapi, Litestar, Apispec, Flasgger, Spectree, Connexion, ฯลฯ ) ที่ให้การสนับสนุนสำหรับข้อกำหนดของ OpenAPI นอกกรอบ
Litestar ได้รับการสนับสนุนสำหรับ Swaggerui, Redoc, Rapidoc และ Elements และ Fastapi ให้การสนับสนุน Swaggerui และ REDOC แต่จะเกิดอะไรขึ้นต่อไป? คนต่อไปจะเพียงพอหรือไม่?
พวกเขาทั้งหมดมีสิ่งหนึ่งที่เหมือนกัน HTML บางตัว (เป็นสตริง Python หรือไฟล์) เทมเพลตด้วยการกำหนดค่าที่กำหนด
คุณเห็นไหมว่าฉันจะไปที่ไหน?
ฉันต้องการให้ openapipages เป็น SQLALCHEMY ของเครื่องมือเอกสารที่ใช้ OpenAPI Spec
หนึ่งอินเตอร์เฟสสำหรับหลาย ๆ คน! และแน่นอนว่าเฟรมเวิร์กไม่เชื่อเรื่องพระเจ้า ... เพื่อให้คุณสามารถใช้มันในโครงการ Fastapi, Litestar หรือโครงการอื่น ๆ ที่สร้างข้อกำหนดของ OpenAPI
โครงการ Fastapi และ Litestar และคำขอดึงทั้งสองที่กล่าวถึงข้างต้นเป็นแรงบันดาลใจให้ฉันสร้างแพ็คเกจนี้
openapipages มีการแจกจ่ายภายใต้ข้อกำหนดของใบอนุญาต MIT