问题标签 [hal-json]
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.
java - 包含弹簧数据休息时,弹簧以纯 JSON 而非 HAL 格式返回资源
当我为我的实体使用由 Spring Data Rest 提供的默认控制器时,一切正常。输出如下所示:
但是,如果我使用自己的 Controller,则输出如下所示:
我的控制器
我的用户:
如果我删除 spring data rest 依赖项并包含 spring-hateoas、spring-plugin-core 和 json-path (com.jayway.jsonpath) 它可以工作。但我想将 spring-data-rest 用于其他一些实体
两个问题:
- 为什么 HAL 不是包含 spring 数据的默认值?
- 如何将 HAL 设置为输出格式
spring - Spring HAL 创建关联子资源
请检查在 Spring Data REST 中发布 @OneToMany 子资源关联的问题
现在常识告诉我要创建一个新评论,我应该能够对例如http://localhost/posts/1/comments进行 POST 。同时,我还应该能够通过在http://localhost/comments/search/findByCommenter?commenter=XXX上的搜索来检索用户的所有评论。
使用spring,不支持发布我提到的方式。你需要修补。据我所知,只有在您没有专门的评论存储库的情况下。因此,如果您没有评论存储库,您可以修补新评论到http://localhost/posts/1/comments ,或者如果您想要评论的可搜索性,您必须发布到http://localhost/ comments由评论者。这背后的原因是什么?
java - Java HAL 没有扩展基类?
在我目前正在进行的一个项目中,通过 REST API 支持 HAL 是通过扩展 Springs 获得的org.springframework.hateoas.ResourceSupport
,以便可以将链接添加到对象中。
一个简单的例子:
现在在 web 层,我可以在表示中添加链接:
一切都很好。
问题是我宁愿直接重用域对象(MyData),而不是在 Web 表示层中创建一个单独的类来实现这一点。这样做的原因是,在这种特殊情况下,我的应用程序非常简单,可以直接使用域对象,并且我希望避免映射逻辑与 Web 层之间进行转换,无论是手动编码还是使用映射工具。反对映射逻辑的另一个论点是业务逻辑经常潜入映射逻辑,使业务逻辑更难遵循。
所以这里是域类:
不幸的是,这并没有给我任何地方可以附加我的 HAL 链接。
所以我的问题是,是否有适用于 Java 的 HAL 框架,它可以让我直接重用 Web 层中的域对象,而无需使用“扩展”并强制我沿着 Web/域映射逻辑的路线走下去?
在 Spring 中使用 HAL 支持的其他一些方法可以让我这样做吗?泽西岛的 HAL 支持怎么样,这不那么突兀吗?
zend-framework2 - 如何使用 ZF2 中的 DoctrineObject Hydrator 获取嵌套数组输出?
是否有可能/如何使 ZF2DoctrineObject
水合器将其输出作为嵌套数组而不是具有嵌套实体对象的数组提供?
以便
而不是那个
附加信息/背景:
在我正在处理的 ZF2 应用程序中,我正在使用 Doctrine 并拥有实体Foo
和Bar
. 它们之间有OneToOne
关系—— Foo
has a
Bar
:
当我检索一个Foo
对象并将其传递给DoctrineModule\Stdlib\Hydrator#extract(...)
(在我的应用程序中它是在 中完成的ZF\Hal\Plugin#convertEntityToArray(...)
)时,我得到一个元素bar
类型为的数组Bar
。
在下一步中(实际上是之后的几次调用),这个结果被传递给Zend\View\Renderer\JsonRenderer#render(...)
,然后传递给Zend\Json\Json::encode(...)
,它在内部执行json_encode(...)
.
所以foo[bar]
过滤掉的值和输出看起来像:
angularjs - 书签 AngularJS 前端(直接访问) - Spring Data Rest 后端
我已经开始实现一个 Web 前端来操作由Spring Data Rest
传统关系数据库提供的 RESTful 服务。这是完成的,AngularJS
并且我发现的库angular-hal
非常适合.HATEOAS
Spring Data Rest
例如,我只需要知道第一个 API 端点('/'),然后我的所有查询都是通过关系完成的,而不关心 url。我遇到的问题是能够直接访问显示我的实体之一的页面。
让我们以联系人存储库为例。如果我从主页开始,然后浏览联系人列表,然后选择我想详细查看的联系人,没有问题。
但我无法直接访问显示联系人详细信息的页面:资源从列表控制器注入到编辑控制器,如果列表控制器未告知,编辑控制器无法知道要请求的 url。
根本问题是Spring Data Rest
,实体没有公共字段id
(不是 JSON),并且存储库没有 APIrelation
可以通过 id 搜索。
我想了一些解决方案,但我不喜欢其中任何一个。
1. 在后端工作
- 为所有需要添加书签的实体添加一个
Projection
with 方法getId()
findById()
在仓库界面 添加对应- 使用前端 url 中的 id 作为参数(或路径)并通过调用新的可用搜索关系来解析资源。
- 缺点:这迫使我们手动重做 Spring Data Rest 自动生成的所有 DTO,因此我们失去了框架的目的之一。
- 问题:有没有办法将 Spring 配置为自动公开这些 id 字段和 findById 方法?
2.使用自我关系
angular-hal
$href('self')
使用方法获取实体的自身 URI- 将其用作页面的参数并通过
halClient.$get(resourceUri)
在其上调用 new 来解析资源 - 缺点: uri 需要在页面 url 放入前后处理,以防止地址栏中的另一个“http://”导致错误。我想对它做一些base64编码,但这很消耗。
- 缺点:这会将 API url 暴露给世界,并且这些数据可能很关键并且需要保持隐藏(即使这也可以通过调试器监视网络流量来访问)。
3.忘记HATEOAS
- 不要为关系和发现能力而烦恼
- 删除
angular-hal
并仅$resource
与普通的旧 url 映射一起使用 - 缺点:这是倒退,感觉就像没有遵循指导方针......
那么,我错过了什么吗?在完整的 RESTFul HATEOAS 环境中访问数据的最佳实践是什么?
spring-data-rest - 功能区是否负载平衡 spring-data-rest HAL 资源链接
如果我有 2 个服务 A 实例,使用spring-data-rest
该服务注册自己,spring-cloud
eureka
客户端应用程序 B 使用Ribbon
客户端负载平衡,HAL
A 响应中的链接会Ribbon
在 B 跟随它们时进行负载平衡吗?
PS:我知道我可以建立一个原型来测试自己,但我时间紧迫。
提前致谢。
api - 具有相同 rel 的链接的 HAL+JSON 表示
HAL 规范说:
注意:如果您不确定链接是否应该是单数,请假设它是多个。如果您选择单数并发现需要更改它,您将需要创建新的链接关系或面对破坏现有客户。
与特定 rel 单数或复数建立链接是否仅适用于在特定资源表示中使用该 rel,还是适用于在任何资源表示中使用该 rel?
例如,如果我决定item
rel 下的链接在某个资源 X 中应该始终是多个,那么该约束是否仅适用于资源 X,或者如果我碰巧在那里使用它也适用于资源 Y item
?
hateoas - What is better between one link versus an array of links?
Option 1:
Return as many links as there are resources.
It can see it being useful in the case we've already been caching some of the player resources on the client side.
Option 2:
Return a single link leading to the list of resources.
It looks a lot cleaner, and we can fetch the players in one request.
hateoas - 可以有不同的链接指向相同的资源吗?
选项1:
我们总是返回“绝对”链接(没有嵌套)。这样,我们总是为客户提供给定资源的相同链接。
需要吗?(知道它需要在服务器端进行额外的工作)
选项 2:
我们还可以返回“相对”链接,嵌套在返回给客户(这里是员工)的资源下。但是现在客户端可能已经收到了对应于同一资源的2 个不同的链接(“ http://api.com/companies/1 ”和“ http://api.com/employees/4/company ”)。
有没有比另一个更好的选择,为什么?
hateoas - 使用 HAL 呈现分页资源的正确方法是什么?
这听起来像一个菜鸟问题,但我想知道用 HAL 格式呈现分页资源的最佳方式是什么?现在我正在使用 Spring HATEOAS API 将Page
object 转换为 resource PagedResourcesAssembler#toResource(Page<T>, ResourceAssembler<T,R>)
。这将产生以下输出:
}
一切正常,但唯一的问题是返回的集合在_embedded
字段下并且有类名,所以客户端也必须知道这个类名,对吗?content
以非 HAL 格式返回集合会更好吗?如果是,我应该如何使用 Spring HATEOAS 实现它?