如何在FastApi生成的API中生成长类型变量?

问题描述 投票:0回答:2
这堂课是一个项目的一部分:

from pydantic import BaseModel, StrictInt, constr, validator class Person(BaseModel): person_id: StrictInt person_name: constr(strip_whitespace=True, strict=True) @validator('person_id') def person_id_validator(cls, val): assert val is not None return val @validator('person_name') def person_name_validator(cls, val): assert val != '' return val
当使用

FastAPI().openapi()

为此类生成API-SPEC时,变量的类型始终是
person_id
,因此,从该规范生成的Java客户端始终具有包装器类
integer
对于变量
Integer
。但是,
personId
可能是一个很长的数字(> 5,000,000,000),我不能保留在
personId
中。
pyddantic本身没有内置。 Python内部处理INT32和INT64,因此我无法控制这一点。我尝试在
Integer
中使用
Long

numpy.int64

使用
torch.long
arbitrary_types_allowed
,但这总是在运行时失败。
class Config
.
我如何实现?
	
在Openapi中,长整数定义为:

ValueError: Value not declarable with JSON Schema, field: name='person_id' type=int64 required=True

python fastapi pydantic openapi-generator
2个回答
2
投票
type: integer format: int64

。使用FastApi/Pydantic时,您可以添加

format
属性如下:

format

    
background

从本质上讲,您无需指定长INT(或INT64),因为转换是自动完成的。
但是,如果与我一样,API被另一种语言(例如C#)使用,并且该语言将
person_id: StrictInt = Field(..., format='int64')

0
投票
integer

-您需要将格式指定为

int32

以防止未来问题。

宣扬 在Fastapi中,API规格和模式是由

swaggerOpenapi

.
。 如您所见,
openapiInteger
可能具有
int64

format

或未指定的(默认)的字段,然后可以通过语言来解释。

如何

整数格式应在int32对象中指定。 这是:
int64将工作起作用,但它不受衬里的认可,也无法适用于列表:Field

.
。 根据
PydanticDocument
,正确做到这一点的方法是使用
person_id: StrictInt =  Field(format='int64')
属性。

list[StrictInt]

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.