- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想为我的客户开发团队记录一个 REST 服务。
所以我将 Spring-Hateoas
中的一些 Links
添加到我的资源 API,并将其插入 swagger-springmvc
@Api ...
注释来记录所有内容并为我的 Angular 团队提供良好的 API 引用,以便能够理解我的 REST 服务。
问题是 swagger
无法发现哪些链接是可能的,只是给我一大堆 Links
而不说它们可能的值。
这是一个(简单的)示例。 Swagger 检测到:
Model Schema
CollectionListResource {
collections (array[CollectionResource]): All available collections,
links (array[Link]): Relations for next actions
}
CollectionResource {
collectionId (string): Collection Unique Id,
name (string): Human readable collection name,
links (array[Link]): Relations for next actions
}
Link {
rel (string, optional),
templated (boolean, optional),
href (string, optional)
}
我实际上是在 HAL 中:
{"collections":
[{"collectionId":"5370a206b399c65f05a7c59e",
"name":"default",
"_links":{ [
"self":{
"href":"http://localhost:9080/collections/5370a206b399c65f05a7c59e"
},
"delete":{
"href":"http://localhost:9080/collections/5370a206b399c65f05a7c59e"
}
]}
}, ...]}
我试图扩展 Link
和 ResourceSupport
以拥有它们的注释版本,但这导致我无处可去。
有没有一种方法/工具可以用来生成一个好的 API 文档,告诉 self
关系是获取内容,而 delete
关系是删除收藏?
我喜欢 swagger 的良好用户界面,但如果它有助于使文档 真正 完整,我不介意更改我的文档工具。
我最终可以考虑将 spring-hateoas 更改为另一个链接生成器,但我不确定现在是否有更好的工具可用。
最佳答案
Swagger-UI 本身不是 hypermedia aware ;或者至少它的局限性在于它只能从顶级 api 导航到 api 列表。这在规范的 v2.0 中也没有太大变化,显着增加了对带外文档的外部文档的链接。
您需要的是 HAL browser 的混合体和 swagger-ui .正如您正确指出的那样,“删除”一词与其在集合资源上下文中的含义之间存在语义差距。 HAL 使用居里和可选配置文件的组合 ALPS弥合这一差距。居里只是链接关系的命名空间版本,因此它们不会与其他域发生冲突。 Restful Web APIs是一个很好的资源,可以更多地了解这些想法以及如何设计媒体类型。 spring data rest project还有一个很好的例子来说明如何实现这一点。
以下是演示和组合这些方法的示例。
{"collections":
[{"collectionId":"5370a206b399c65f05a7c59e",
"name":"default",
"curies": [
{
"name": "sw",
"href": "http://swagger.io/rels/{rel}",
"templated": true
},
{
"name": "iana",
"href": "https://www.rfc-editor.org/rfc/rfc5023",
"templated": false
},
{
"name": "col",
"href": "http://localhost:9080/collections/{rel}",
"templated": false
}
],
"_links":{ [
"self":{
"href":"http://localhost:9080/collections/5370a206b399c65f05a7c59e"
},
"sw:operation":{
"href":"http://localhost:9080/api-docs/collections#delete"
},
"sw:operation":{
"href":"http://localhost:9080/api-docs/collections#search"
},
"sw:operation":{
"href":"http://localhost:9080/api-docs/collections#update"
},
"iana:edit":{
"href":"http://localhost:9080/collections/5370a206b399c65f05a7c59e"
},
"col:delete": {
"href":"http://localhost:9080/collections/5370a206b399c65f05a7c59e"
}
]}
}, ...]}
所以从最通用到最具体,解决方案(按此顺序)是
我知道这并不能准确回答您的问题,而且该领域的工具仍在不断发展。希望这会有所帮助。
免责声明:我是 core maintainers 中的一员的 springfox这是一个 Spring 集成解决方案,可以轻松提供 Swagger 服务描述。因此,非常欢迎您就如何解决此问题提供任何反馈!
关于spring - 来自 Spring Hateoas 的文档 HAL "_links"( Swagger )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389733/
我需要移植一个 bash 脚本,它使用已弃用的 HAL 工具,如 hal-get-property或 hal-find-by-capability去开发。 HAL声明 HAL 已合并到 udev,但我
我正在研究 Spring Data REST,特别是 HAL 浏览器。我一直在关注 http://docs.spring.io/spring-data/rest/docs/current/refere
Level 3例如,RESTful API 的功能自定义媒体类型,如 application/vnd.service.entity.v1+json。在我的情况下,我使用 HAL在我的 JSON 中提供
我在 PropertyNotified 信号期间从处理程序调用 org.freedesktop.Hal.Device 上的 GetProperty。我仅对已添加或更改的属性调用 GetProperty
我正在尝试理解另一位程序员编写的代码。它使用I²C通信以将数据写入 STM32 微 Controller 的 EEPROM。 一般来说我理解他的代码是如何工作的,但我不明白他为什么使用HAL_LOCK
我正在研究如何实现针对多个微 Controller 的自定义C++ HAL,这些微 Controller 可能具有不同的体系结构(ARM,AVR,PIC等),同时又保持良好的状态。 我继承了几个大型的
我正在做一个 C++(使用 cmake)嵌入式 HAL 层,并尝试添加一个特定于某些 MCU 的库。现在这里的问题是从上层访问库函数。 我的解决方案是使用该特定板的 cmake 文件来定义一个宏,在该
对于在 x86 硬件上运行的 Linux 操作系统,要在内核中调用作为 TCP/IP 驱动程序(对于 x86)的一部分的 TCP_listen(),用户空间客户端应用程序调用 listen() 接口(
跟随我的post我想知道驱动程序和 HAL 之间有什么区别? 最佳答案 从这里doc : 硬件硬件抽象层定义了相机服务调用的标准接口(interface),您必须实现该接口(interface)才能使
在Linux中,HAL提供硬件抽象,设备驱动也提供硬件抽象。你能解释一下两者之间的区别吗? 最佳答案 设备驱动程序在特定缓冲区和控制标志 block 位置与特定设备通信。硬件抽象层抽象出特定设备如何工
我在通过 USART 接收数据时遇到了一些麻烦。我真正想要实现的是,我可以通过 USART 接收没有特定长度(只有最大可能长度)的命令。所以我使用中断例程来检查接收到的每个字符,但不知何故我仍然无法实
我正在使用 Spring Boot 2 构建一个 API,而 Angular 6 客户端必须处理如下响应: { "_embedded" : { "userResourceList" : [
我有以下问题 我有 Spring 数据休息的基本配置(没什么特别的,没什么自定义的)。 使用 spring-data-rest-webmvc 2.0.0 RELEASE 和 spring-data-j
我试图在我的 stm32f4 发现上闪烁 LED。不知何故,它停留在延迟功能上。我已将 SysTick 中断优先级更改为 0 并添加了 IncTick() , GetTick()职能。我错过了什么?
干杯... 我知道它代表硬件抽象层,但它到底是做什么的?它是为 VB 等高级语言设计的与硬件通信吗? IN/OUT 指令是调用 HAL 例程还是通过 I/O 管理器直接与硬件的设备驱动程序通信? 提前
哪里可以找到 DirectX HAL 规范? 服用 this diagram正确 然后所有 GPU 供应商都必须编写他们的设备驱动程序,以便他们与 HAL 对话。 HAL 在哪里指定? MSFT 如何
我正在做一个需要设置简单 LCD 的项目。此 LCD 使用 'st7032i' 芯片来控制 LCD。 我想通过 I²C 接口(interface)控制 LCD。 作为 Controller ,我使用
我遇到了以下问题:我的电子板上有 2 个输入: #define TOR1_IN_uC_Port GPIOC #define TOR1_IN_uC_Pin GPIO_P
大家好,我正在尝试使用 stm32 HAL 库进行串行 rx 中断,但出现了我不知道的错误。 这是一个非常简单的程序。 PC 将字节提供给 stm32 板,stm32 将使用 rx 中断例程获取这些字
我正在尝试找到一种标记 USB 闪存设备的方法,以便我可以通过编程方式进行测试,而无需安装它或更改标签。 我是否可以修改设备的任何属性,而不会导致设备的行为/外观对用户而言有所不同? 运行 Ubunt
我是一名优秀的程序员,十分优秀!