- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 HATEOAS 应用于现有应用程序,但在建模将由 API 响应驱动的表单输入时遇到问题。
该应用程序允许搜索和预订两个地方之间的连接。第一个端点允许搜索连接 GET /connections?from={lat,lon}&to={lat,lon}&departure={dateTime}
并返回以下有效负载(响应正文)。
[
{
"id": "aaa",
"carrier": "Fast Bus",
"price": 3.20,
"departure": "2019-04-05T12:30"
},
{
"id": "bbb",
"carrier": "Airport Bus",
"price": 4.60,
"departure": "2019-04-05T13:30"
},
{
"id": "ccc",
"carrier": "Slow bus",
"price": 1.60,
"departure": "2019-04-05T11:30"
}
]
POST /orders
请求:
{
"connectionId": "aaa",
"email": "passenger@example.org"
}
{
"connectionId": "bbb",
"email": "passenger@example.org",
"flightNumber": "EA1234"
}
{
"connectionId": "ccc",
"phoneNumber": "+44 111 222 333"
}
"_templates"
但模板本身没有 URI。假定在自链接上运行,在我的情况下是 /connections... 而不是 /orders 。 "template"
,因此假定集合的所有元素都具有相同的字段,而在我的应用程序中并非如此。 "actions"
适合我的用例,但该项目似乎已死,而且没有许多主要语言的支持库。 最佳答案
在您的示例中, Connections
似乎是资源。 Orders
是否真的是资源尚不完全清楚。我猜可能是的,但是要拥有 Order
,您需要 Client
和 Connection
。因此,要创建 Order
您需要公开一个集合,可能来自 Client
或 Connection
,可能两者都有。
我认为断开连接是因为“现在我们已经有了可用连接列表,客户端可以选择一个并创建一个 Order
”。这是完全有效的,但它是远程过程调用 (RPC) 思维,而不是 REST。客观上两者都不比另一个好,除非在一组特定的项目要求的上下文中,通常它们不应该混合在一起。
使用 RPC 思维,定义了创建订单方法(例如使用 OpenAPI),并且任何客户端都应该使用一些带外信息来确定所需的正确形式(即通过阅读 OpenAPI 规范)。
使用 REST/HATEOAS 思维方式,正确的方法是从 Orders
公开 Connection
集合。集合中的每个 Connection
都有一个 self
链接和一个 Order
集合(链接或对象,由应用需求定义)。 Order
的每一项都有一个 self
链接,这是指定可供性的地方。 Order
是一种已知类型(即使使用 REST/HATEOAS,客户端和服务至少必须就共享词汇表达成一致),客户端大概知道如何定义。该词汇表可以使用任何有效的机制来定义——json-ld、XSD 等。
HATEOAS 要求结果包含客户端更新状态所需的一切。不能有带外信息(共享词汇除外)。因此,要解决您的问题,您要么需要从 Order
公开 Connection
的集合,要么需要允许通过发布到 Order
来创建 Connection
。如果后者看起来有点像黑客,那可能是。
例如,在 HAL-Forms 中,我会执行以下操作:
{
"connections": [{
"id": "aaa",
"carrier": "Fast Bus",
"price": 3.20,
"departure": "2019-04-05T12:30"
"_links": {
"self": { ... }, // link to this connection
"orders": {} // link to collection of orders for this connection
}
},
, ...],
"_links": {
"self": { ... } // link to the collection
},
"_templates": { ... } // post/put/patch/delete connection
}
orders
的链接,并从那里获得
_templates
集合,其中包含管理
Order
资源的说明。
Order
POST 可能需要连接标识符和客户端信息。
HAL-Forms Spec 定义了一个正则表达式属性,可用于指定要为任何特定表单元素提供的数据类型。由于您已经通过特定连接导航到达订单,您将能够在您的
_templates
中为该订单准确指定哪些字段是必需的。例如
/orders?connectionType=aaa
将返回一组与
/orders?connectionType=bbb
不同的必需属性,但两者都使用
self
的相同
/orders?connectionType={type}
链接,您将在 POST/PUT/PATCH 上对其进行验证。
_links
和
_templates
。见
this GitHub issue 。
关于json-ld - HATEOAS 和由 API 驱动的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55315913/
我正在尝试创建尽可能小的 ELF。我创建了一个这样的测试文件(NASM 语法): SECTION .text dd 0xdeadbeef 使用此链接描述文件: SECTIONS { .text
GNU LD 链接器命令语言是否有条件语句? 背景:我正在为 arm cortex m0+ 开发固件,该固件由引导加载程序和应用程序组成。两者都在单独的项目中进行编译和刷新,但我使用了一个框架,其中包
我很确定 ld 有一个手册页链接器脚本语法,但我找不到它。 最佳答案 如果您更喜欢比 info 更方便的东西, 这是一个可浏览的 HTML 版本:ld.info: Scripts .但它可能不是完全最
谁能解决这个练习,这样我就能明白我错在哪里,因为有太多的 LOL 变量。 生成一个 C 代码,将其放在以下表达式之前 printf ("% ld% ld% ld \ n", lol, & lol, *
在他关于理解 Linux Kernel Initcall Mechanism 的文章中, Trevor 创建了一个用户空间程序来模拟调用 linux 驱动程序的 init_module() 的机制。
/usr/bin/ld: cannot find -ldlib /usr/bin/ld: cannot find -lcblas /usr/bin/ld: cannot find -llapack 在
我想以 json-ld 格式创建一组人,但我需要保留一些键而不是使用数组,所以我首先尝试了这个: { "@context" : { "@base" : "http://www.exampl
所以我试图围绕 JSON-LD 进行思考,我看到的所有示例主要包括嵌入“链接数据”。但我想提供对链接数据的引用(主要是因为嵌入所有数据可能会产生 10MB 的有效负载)。所以我想知道我这样做是否正确。
我在这里复制了 json-ld standard 中的示例的一部分: { "@context": { "foaf": "http://xmlns.com/foaf/0.1/", "
考虑这样一个程序: #include void foo() __attribute__((__weak__)); int main() { printf("%p\n", (void *)fo
我正在尝试使用一个名为 GLV 的小部件库对于我正在开发的应用程序。我正在运行 Linux Mint 17。我安装了所有库并成功构建了 GLV 库,但是当我尝试运行已构建的示例之一时,出现了此共享库错
在将未编辑的 JSON 数据转换为 JSON-LD 时,使用前缀和数据值为对象构造 IRI 时遇到问题。我运行的示例代码是: { "@context" : { "prefix" : "
假设我有一个 JSON 对象,它在嵌套对象中包含一些属性。 { "title": "My Blog Post", "meta": { "publishedAt": "2
我是 JSON-LD 和 LOD 的新手,所以请原谅我使用的术语。我正致力于在 JSON-LD 中创建数据模型,以描述基于欧洲数据模型 (http://pro.europeana.eu/edm-doc
我有一个玩具 x86 汇编程序,我正在用 as 编写和编译它和 ld : .text .global _start _start: movq $1, %rax movq
我正在尝试创建 Google 的结构化数据,但不知道我在做什么。我将其设置为一个组织,然后将 SD 标记工具用于我的所有产品。我将每个 JSON-LD 产品直接从标记工具而不是嵌套放入它自己的脚本标签
我正在尝试创建 Google 的结构化数据,但不知道我在做什么。我将其设置为一个组织,然后将 SD 标记工具用于我的所有产品。我将每个 JSON-LD 产品直接从标记工具而不是嵌套放入它自己的脚本标签
我正在尝试使用 vcpkg 和 ndk r20 为 android arm 构建 tesseract我必须编辑 CMakeLists.txt 并添加 glob.c 和 glob.h,因为它们不在 nd
长话短说: 有没有办法让我(没有 root 访问权限)使链接器(由 gcc 调用)不知道 /etc/ld.so.conf 中包含的目录的内容 在通过 ldconfig 缓存之后? 详细说明: 我正在尝
我想将/opt/vertica/lib64 添加到系统库路径中,所以我执行以下步骤: (1) 将/opt/vertica/lib64加入/etc/ld.so.conf,运行ldconfig, (2)
我是一名优秀的程序员,十分优秀!