Django Swagger 和 JSON API 呈现问题

Django Swagger and JSON API render issues

使用 django-rest-framework-json-api 我能够创建 API 端点,其工作方式与文档中描述的一样。尝试使用 django-rest-swagger 提供 API 文档并不容易。

1:Swagger 使用 media_type = 'application/json',JSON API 不支持。为了解决这个问题,我创建了第二个渲染 class (renderer_classes) 子 classes JSON API JSONRenderer 并强制媒体类型.

现在端点支持 application/jsonapplication/vnd.api+json 并且 swagger 很乐意在 JSON API 文档结构中呈现。意识到生成的 curl 请求具有 none 标准 JSON API header.

2:Swagger 的解析器也有同样的问题。虽然第 1 期的结果确实有效,但还有一个次要挑战。 Swagger 呈现一个字段名称的平面字典,它不是 JSON API 并且最终由 DRF 请求。

在JSONAPI中是否可以大摇大摆地解析?目前 Swagger 不适用于 PUT 或 POST.

djangorestframework-jsonapi==2.2.0
djangorestframework==3.5.4
Django==1.11.2
coreapi==2.3.1
python 3.6

在这里回答我自己的问题,以便其他人可以从所学知识中获得价值。我们从未找到解决此问题的方法,也没有时间为该项目做出贡献。总的来说,该项目似乎也在苦苦挣扎,可能是因为像我们这样的人没有做出贡献...

现在出现了一个替代项目 drf-yasg,该项目在最初发布时并不存在。 drf-yasg 相对容易部署并解决了我们所有的问题,所以我们现在已经迁移到这个项目。

因此,如果您正在寻找在 DRF 中创建的 JSON API 端点的 swagger api 文档,那么我建议 drf-yasg.

在撰写本文时 JSON API 不支持开箱即用,但有 sample code 和 运行 相对容易。进行此更改后,将自动记录所有端点。

This Github Gist,其中包含我们应用程序的代码,希望在完全开发此功能之前能对您有所帮助。

正如您在自己的回答中指出的那样,还有一个替代方案:drf-yasg。这是一个很棒的包 但不支持开箱即用的 JSON API 架构。

这样你最好使用 drf-yasg-json-api ,通过提供必要的现场检查员,你只需要稍微延长你的 SWAGGER_SETTINGS.

查看 drf-yasg-json-api Github repo 了解详情。

免责声明:我是这个包的作者。