python - 如何使用 swagger/openapi 在客户端/服务器之间正确共享代码
问题描述
我试图弄清楚如何使用 openapi-generator 来最小化客户端和服务器之间重复的 python 代码。如果重要的话,我将 FastAPI 与 Pydantic 一起用作我的 Web 框架。
在服务器端,我有:
class Member(BaseModel):
name: str
def greeting(self):
return "Hello " + name
然后我可以写:
m1 = Member("John Doe")
print(m1.greeting())
从服务器的角度来看,到目前为止一切都很好。
然后在 FastAPI 中创建一个 API
@app.get("/members/", response_model=List[Member])
def get_members():
m1 = Member("Jane Doe")
m2 = Member("John Smith")
return [m1, m2]
使用 生成客户端代码后openapi-generator
,我可以
my_members = my_api.get_members()
在客户端编写:到目前为止,一切都很好。
然而,现在问题来了。我想调用my_members[0].greeting()
客户端,但这在openapi-generator
生成的客户端库中不可用。它不会生成任何辅助函数,这意味着我必须想出一种更复杂的方式来在客户端和服务器之间共享数据结构和方法。
以这种方式共享代码我错了吗?有更好的方法吗?
解决方案
OpenApi 只允许您指定对象的数据,而不是函数。
要在客户端和服务器之间共享公共代码,您可以使用公共代码创建第三个项目/模块。
然后将其用作客户端/服务器项目中的依赖项。
─ myapp
├── client
│ └── __init__.py
├── server
│ └── __init__.py
└── common
└── __init__.py
推荐阅读
- javascript - Angular 中的 Content-Security-Policy 标头
- debugging - 不同文件的 VSCode 启动文件调试配置
- python - itertools.product 用于所有列
- angular - 无法更改 kendos tabstrip 文本颜色
- jmeter - 如何使用 JMeter 测试 Web 应用程序的事件?
- sql-server - 不可能:UPDATE 语句失败,而 SELECT 成功
- python - python在处理来自数据库的响应时添加额外的引号(将json转换为字符串)
- css - FullCalendar v5 更改 Angular 中的事件大小
- azure - Azure.Messaging.ServiceBus.ServiceBusClient 的连接字符串
- laravel - 如果有两个或更多数据,则更新,如果数据在 laravel eloquont 的单个查询中不存在则跳过