【问题标题】:How to properly share code between client/server using swagger/openapi如何使用 swagger/openapi 在客户端/服务器之间正确共享代码
【发布时间】:2020-05-17 06:04:19
【问题描述】:

我试图弄清楚如何使用 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-generator分享具体的代码实现。如果您有特定于平台的依赖代码或特定于语言的库(例如 Python 中的 numpy),您希望发生什么。我认为这是不可能的。
  • 我没有找到任何与此相关的文档,尽管我是 openapi-generator 的新手。对于为与服务器语言相同的语言(在我的情况下为 Python)生成的客户端存根,最好将帮助函数传递给为客户端生成的代码。或者如果这不起作用,也许有人可以推荐一种更好的方法来组织我的代码,以便我可以在客户端和服务器上生成相同的帮助函数。这似乎是一个常见问题。

标签: python swagger openapi openapi-generator fastapi


【解决方案1】:

OpenApi 只允许您指定对象的数据,而不是函数。

要在客户端和服务器之间共享公共代码,您可以使用公共代码创建第三个项目/模块。

然后将其用作客户端/服务器项目中的依赖项。

─ myapp
   ├── client
   │   └── __init__.py
   ├── server
   │   └── __init__.py
   └── common
       └── __init__.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多