【发布时间】:2022-01-22 20:01:14
【问题描述】:
我正在建模 REST api 集来管理资源(例如:人)。 我需要公开创建 Person 的能力:
- 在正文负载中提供数据:POST /Person body:{name:"John", surname:"Doe"}
- 通过文件将数据作为 multipart/form-data 提供:POST /Person multipart/form-data {@FormDataParam("file") InputStream uploadInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail}
这意味着两个 API 的 HTTP 动词 + 路径相同。 现在,如果我尝试生成 OpenAPI 3.0 文档,我将失败,因为 http + 路径必须是唯一的。
什么是REST方式来建模这两种创建资源的方式?
之后,棘手的部分,在我的两个 jersey2 端点下方:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Operation( tags = {"Import"},
summary = "Import from file path",
responses = {
@ApiResponse(responseCode = "202", description = "Import accepted",
content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ImportRepresentation.class))),
})
public Response importFromFilePath(@RequestBody( description = "Import from file path", required = true,
content = @Content(schema = @Schema(implementation = ImportFileRequest.class))) ImportFileRequest importFileRequest)
{
.......
return response;
}
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Operation( tags = {"Import"},
summary = "Import provided file",
responses = {
@ApiResponse(responseCode = "202", description = "Import accepted",
content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ImportRepresentation.class))),
})
public Response importUploadedFile(
@Parameter(schema = @Schema(type = "file", format = "binary", description = "file"))
@FormDataParam("file") InputStream uploadedInputStream,
@Parameter(hidden = true)
@FormDataParam("file") FormDataContentDisposition fileDetail,
@Parameter(schema = @Schema(implementation = String.class), required = false)
@FormDataParam("commitMessage") String commitMessage)
{
........
return response;
}
如何注释它们以生成带有两个 requestBody.content 条目的 OpenAPI.yaml?
【问题讨论】: