问题标签 [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.
symfony - 如何使用 JMSSerializerBundle 创建良好的超媒体格式?
假设我想创建一个类似于以下内容的 XML 响应:
给定一个如下所示的域模型:
以及类似以下的金钱阶层:
现在,我的问题。创建如下所示的响应非常简单
使用注解、XML 或 YAML 来告诉 JMSSerializerBundle 如何序列化产品对象。但是,实体不应指定xmlns:atom
and条目,因为它不应该知道它的位置和位置。您还可以想象更多具有不同 - 属性的链接,例如.
想到的一种解决方案是一种服务,它监听特定对象的序列化事件,并根据需要添加这些属性和标签。该服务可以使用 DI 来获取, -service 等以适合所请求格式的格式生成这些链接。IE 在 XML 响应中,它可以将适当的类型设置为<atom:link>
rel
edit
Request
Router
application/media-format+xml
,而在 json 响应中,它可以生成类似
现在,在JMSSerializerBundle 的文档中,我找到了@PreSerialize
和的注释@PostSerialize
,但它们似乎只能调用被序列化对象的方法。
有谁知道如何/是否可以实现?还是我必须使用 Twig 等模板引擎并手动创建 XML 响应?
servicestack - ServiceStack 自定义格式和供应商特定的内容类型
我正在尝试为 HAL(超文本应用程序语言)添加自定义格式。我创建了我的自定义格式处理程序,我遵循了 ServiceStack v-card 示例,一切正常,我能够将它注册到 ServiceStack。
问题是在我的自定义格式中,我试图指定“hal+json”的内容类型
当我向我的服务发出 GET 请求并指定格式时,如下所示:
'http://mylocalserver:555555/items?format=hal+json'
ServiceStack 默认只使用 Json。我尝试使用我的自定义格式化程序将内容类型更改为不同的内容,例如“halj”和使用“?format = halj”的ServiceStack格式请求。
我拉下 ServiceStack 的源代码,发现其中的任何请求都会检查查询字符串的格式,如果格式甚至包含“json”,它将默认为 Json 格式化程序。
有没有办法解决?我一直在尝试查找一些有关如何覆盖此行为的文档。
javascript - AngularJS $资源和超媒体
我有一个像这样定义的 AngularJS $resource:
和一个 RESTful API。所以当我做一个GET
我Menus
得到这个回来:
问题是,如何删除菜单 2?(鉴于它有自己的超媒体链接http://cafe.com/api/menus/2
:)
json - 带有表单和链接的 JSON 超媒体 API
我正处于规划 REST api 的早期阶段,我希望它遵守 REST 的 HATEOAS 约束。但我也想提供 JSON 格式。所以我的问题是是否有约定可以在 JSON 中表示链接和表单。
我找到了链接的示例,看起来这是表示链接的一种非常常见的方式:
另一方面,表示形式并不是我见过的很多东西。我在想也许有人坐下来想出了一些类似的东西,但考虑了所有的警告:
对此的灵感来自观看此视频,Jon Moore 认为 JSON 不是超媒体 api 的好格式:
http://oredev.org/2010/sessions/hypermedia-apis
顺便说一句真的很好!
感谢所有输入!
rest - 自链接在超媒体 API 中的重要性是什么?
我在 REST 上阅读的所有文章和书籍都重复了将“自我”相关链接添加到您的超媒体响应的重要性,但它们都对原因和用例有所了解。
为什么要添加自我链接,它有什么用处?
java - How to retrieve entity relationships after save?
I'm developing a RESTful webservice with spring-data as its data access layer, backed by JPA/Hibernate.
It is very common to have relationships between domain entities. For example, imagine an entity Product
which has a Category
entity.
Now, when the client POST
s a Product
representation to a JAX-RS method. That method is annotated with @Transactional
to wrap every repository operation in a transaction. Of course, the client only sends the id
of an already existing Category
, not the whole representation, just a reference (the foreign key).
In that method, if I do this:
the variable entity
now has a Category
with only the id
field set. This didn't surprise me. I wasn't expecting a save (SQL insert) to retrieve information on related objects. But I need the whole Product
object and related entities to be able to return to the user.
Then I did this:
that is, retrieve the object after persisting it, within the same transaction/session.
To my surprise, the variable entity
didn't change anything. Actually, the database didn't even get a single select query.
This is related with Hibernate's cache. For some reason, when in the same transaction, a find does not retrieve the whole object graph if that object was previously persisted.
With Hibernate, the solution appears to be to use session.refresh(entity)
(see this and this). Makes sense.
But how can I achieve this with spring data?
I would like to avoid to create repetitive custom repositories. I think that this functionality should be a part of spring data itslef (Some people already reported this in spring data's forum: thread1, thread2).
rest - 如何为 RESTful Web 服务创建自定义媒体类型(应用程序/vnd)?
我现在正在使用 REST,并认为我正确实施HATEOAS只是为了让所有概念都正确。
为此,我想创建自己的媒体类型(application/vnd[...]+xml
和application/vnd[...]+json
)。
第一个问题:媒体类型是否定义了我的服务器和客户端之间的合同?
媒体类型将定义我的消息格式,因此我需要添加 XML 模式和 JSON 模式以配合新的媒体类型(以便 REST 客户端知道消息中的内容以及发送回的内容)。
我在网上做了一些研究,但是缺少有关如何做到这一点的详细信息。它是否只涉及编写详尽的规范/文档,还是有一些技术步骤可以实施?(我不需要向 IANA 注册,对吗?)
如何application/vnd
创建一个新的 - 功能齐全的 - 媒体类型?以及您需要注意什么才能让客户正确使用它?
java - 泽西岛不支持嵌套资源中的声明性超链接是否正确?
Wonkle 类型的 JSON 表示具有一个具有适当值的 url 属性。但是,当Wonkle作为Widget类型中的嵌套属性使用时,其url属性为空值。
我做错了什么,还是这正是 LinkFilter 的工作方式?
谢谢!
rest - 为什么我们在使用超媒体链接时需要自定义媒体类型?
我目前正在设计一个纯粹面向资源的企业服务。在阅读了几篇博客、书籍等之后。我相信带有超媒体链接的 REST 是要走的路。
但是,所有这些博客和书籍都说的一件事是在响应中使用超媒体链接时不要使用 application/xml 作为媒体类型。除了通用声明之外,他们都没有说明原因 - 没有链接关系类型的普通 URI 不会将 URI 的语义传达给客户端。
据我了解,这是一种推荐的方法来定义您自己的自定义媒体类型并让客户知道如何阅读它。但是如果知道连接到我的服务的客户端永远不会是浏览器,这有关系吗?我不能在我的响应中使用 application/xml 类型公开这些链接吗?
我希望这里有人可以详细说明这一点。