问题标签 [hypermedia]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
api - 解析 API 自己的超媒体链接
假设我们有一个 RESTful API 方法:
您可以看到它address
具有指向另一个资源的链接。
要解决该address_id
资源的问题,服务器应该:
分解 URL 并识别路由的“id”部分
甚至向自己发出 curl 请求,以获取该
address_id
链接资源的?
api - RESTful API 设计:接受唯一标识符而不是资源 URI 是否合理?
允许 RESTful API 接受带有指向另一个资源的隐式链接的表示是否有缺点?
为了说明这一点,假设我有两个资源:
一个人除了 之外还有一个唯一标识符id
,即他们的email
。
允许以下交互是否有缺点?
服务器知道电子邮件字段是唯一的,因此可用于标识people
资源。它将创建与该人的关联。
允许这样做的原因是为了让 API 客户端更容易,他们不必先查找资源的 URI。
相反,我当然会允许这种类型的调用:
json - 如果我得到该集合的一项,那么集合响应的 href 应该是什么?
我使用 GET 方法通过 http 请求获取特定的 Web 资源。
我已经实现了服务器以使用超媒体类型 collection+json 进行响应,因此每个响应都是根据规范 ( http://amundsen.com/media-types/collection/format/#query-templates )的项目集合
既然客户在请求一个特定的项目,那么集合的href的内容应该是什么?
我认为它应该是单个项目的相同 url,但我不确定。
web-services - Restful Service 和 Generic Media Type Payload 并保持 HATEOAS
请原谅我,因为我对这个 RESTFUL 的东西还是新手,我一直在阅读博客等......而且他们都有不同的实现/指南,唯一真正的指南是指定超媒体是什么的 Richardson 成熟度模型。
我知道超媒体设计的好处是具有通过根 URL 驱动机器/用户交互的注释链接,并且它将像链接更改时一样可以进化,使用幂等/安全的 http 动词等增强缓存......
我正在尝试设计一个 RESTFUL API Web 服务,并且我计划使用通用媒体类型,例如 HAL 或 Collection+Json 或警报器等......或者可能创建我自己的媒体类型,我认为我不想进入正确的现在...
使用通用媒体类型,我将有一个有效负载、一个数据结构或 DTO 对象,无论你怎么称呼它,比如“具有许多申请人模型和许多地址的应用程序模型等......”
1)我必须在某处指定数据结构定义吗?或某种形式的模板?我已经看到了一些示例,他们将这些数据的定义以人类可读的格式放置在“someurl/doc”中?或者我们应该使用类似 json 模式的东西吗?
2)我见过的一些例子用来自 vcard/foaf 等的链接中的类型修饰了他们的数据项......例如。“名称”:“ http://xmlns.com/foaf/0.1/name ”。这意味着什么?我看到的一些示例像引用了它们的 someurl/doc#name 来描述名称对象等...
3)这是否意味着如果Application Model的payload发生变化,合约的解释器也会发生变化?因此所有客户端都像以前一样中断,就像在 SOAP 中一样?
4)另一种选择,我认为我可以有一个可进化的项目结构,比如具有名称、值、提示的集合+json项目对象,它形成了实际的结构,这样在使用它的客户端上就会有最小的合同变化。
请就我应该如何设计我的对象提出建议,基本上说我有一个应用程序对象,其中包含多个具有多个地址的申请人以简化问题。
乔什
rest - REST 超媒体 API - 从无状态客户端导航
一个直截了当的问题:如果我正在构建一个无状态客户端,它在请求之间“更改页面”,我如何正确使用超媒体 API?
当然,关键点是客户端不应该构造 URL。例如,如果我们要获取某种类型的集合(比如说水果),每个集合条目都将具有一个 URL,以链接到 API 中的单个水果资源。伟大的。
然而,在我的客户中,在展示水果列表后,我希望将列表链接到另一个包含水果详细信息的前端页面。这样的详细信息页面当然应该是可收藏的,等等。前端 URL 的精确结构是我意识到的,从哲学上讲,很少关注 - 但它对下面的问题具有实际意义。
那么问题是,在加载水果详细信息页面时,没有当前上下文的客户端如何决定要获取的 API URL?
现在是什么:o?
最初想到的一个解决方案是在集合响应中有一个“项目”URL 模板,并使用其中的命名参数来构造页面 URL。然后详细信息页面将查询 API 以恢复相同的“项目”URL 并植入它传递的参数。这似乎并不理想,但它确实实现了所需的解耦。
提前致谢。
rest - REST/HATEOAS:模板化restul链接是一种可接受的方法
我正在为我们正在寻求开发的 API 调查整个 Layer3/HATEOS/RESTful/HAL。
我们将公开可能被所有这些链接膨胀的数据列表。将链接模板化不是一个想法,这会被称为什么?我似乎找不到任何提及它,如果这不是一个好方法,为什么?
以一个假设的假期搜索 API 为例,入口点可以提供目的地和出发机场的列表,允许用户使用其中一个开始搜索。
像下面这样的方法会是更有效的方法吗?(松散地基于 HAL)如果不是,为什么?
}
api - 超媒体 API 链路遍历与实用性
我一直在尝试构建一个基于超媒体的 API。事情似乎运作良好。说当我取/books/isbn/12313441213
东西时,我得到了这样的东西:
现在我可以从这个资源中遍历作者。当我获取时,/books/by/author/id/18
我得到这样的东西:
这对我来说似乎也很好。无论这种 uri 模板方式是否良好,我的问题是遍历这样的链接有多实用?
考虑到您想要完整的资源(包括作者详细信息),您必须至少对服务器进行 3 次调用。同样对于集合,您必须对服务器进行大量调用。是的,也许我可以在这里利用资源扩展,但是我为什么要使用超媒体链接,因为我所有的客户都会及时使用扩展资源。
我知道通过让客户端遍历链接,我们获得了很多收益(即,如果客户端构建基于关系的资源发现,当我们更改 api 时,它们受到的影响最小,或者它们被迫从资源端点本身获取最新的模式, ETC)。再说一次,这种方法的实用性或这种方法的性能会扼杀系统。
要么我在超媒体 api 设计中没有得到任何东西,要么超媒体 api 听起来不错,但似乎这只是一个理论上的想法,而不是实际的想法。
对此有什么想法吗?
rest - 使用唯一字段引用资源的 RESTFul 方式
我们的 REST 接口的要求之一是每个资源都可以通过唯一字段(除了主要标识符)来识别。这样做的原因是我们希望能够处理批量导入数据——在这种情况下,客户端无法知道系统生成的主要标识符。
这意味着我们必须能够通过独特的字段来引用我们的资源。使用主键,我们的读取请求如下所示:
并获得与该客户相关的订单
现在,让我们假设 customer 中的两个字段唯一标识它,name ("foo") 和 businessId ("bar")。鉴于此,我想出了以下 URI 来获取该客户的订单:
但我不喜欢我有不同的路径来识别这是通过唯一字段访问的资源。您将如何使用唯一字段而不是主键以 RESTful 方式构建上述查询?
此外,订单如下所示:
允许客户端在与接口通信时可互换地指定 href或键有什么问题吗?
html - Sails.JS 和超媒体 HATEOAS 示例?
有没有人有任何使用 SailsJS 实现 HTML5 超媒体 (HATEOAS) API 的好例子,或者这甚至是一个好主意?如果没有,为什么不呢?
json - 嵌套集合+JSON 超媒体类型示例
Collection+JSON的示例不显示嵌套集合的示例。任何人都可以指出使用嵌套集合的 Collection+JSON 示例或描述他们成功的经验。
例如,这是否适用于链接到两个子集合的顶级入口点: