问题标签 [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.
wcf - 使用 WCF 实现 REST 超媒体
我有一个基于 WCF 的 REST 服务,我计划向它添加超媒体支持。目前我依靠 WCF 通过序列化我的数据合同来构建服务响应。现在有了超媒体,我需要一种方法来指示 WCF 在它构建的 XML 响应中插入超媒体链接。我的问题是,我该怎么做?
一种方法可能是我修改我的数据合同以将所述链接包含为数据成员。然后 WCF 可以自动序列化它们。但这是最好的做法吗?还是在那个时候拦截WCF的序列化过程并添加这些链接更好?或者还有其他更合适的选择吗?
authentication - 超媒体 (ReST) SOA:一致的服务级别身份验证的良好设计?
我目前正在开发一个 SOA 解决方案,其中架构中的每个服务都是安全的、可验证的超媒体资源(就像在真正的超媒体中一样,而不是带有漂亮 URL 的 RPC)。
面向客户的、公司内部的和客户构建的应用程序将建立在此架构之上(这里没有什么不寻常的)。我不能假设应用程序之间存在共同的身份验证模式,因为用户识别和凭证管理的要求可能会有很大差异。
因此,架构中的服务必须采用单独的身份验证方案。理想情况下,这将在服务(例如 HMAC)之间完全一致,以允许尽可能多的客户端/服务器模块重用。
我的问题是:是否有一种通用模式可以跨解耦服务提供一致的身份验证和凭据管理?如果是这样,它是什么?
我提出了一些想法,但如果有经验更丰富的工程师提供意见,我将不胜感激:
1)每个服务都公开一个离散但机械相同的身份验证接口,并负责自己的凭证管理。
2)同1),但具有共享凭证管理。架构中的每个服务仍然公开一个离散的身份验证接口,如1)所示,但底层数据介质是共享的。
3)有一个单一的共享认证服务,负责对自己和所有其他服务进行认证和凭证管理。
我发现想法2)是最吸引人的,但它需要一些改进。除非我在这里完全走错了路。
请尽可能多地批评/建议。当然要记住,这是关于设计而不是实现;目前我对框架/中间件/协议 XYZ 不感兴趣。
为散文道歉,感谢阅读。
api - 自定义媒体类型中的链接关系粒度与精度?
我正在为 RESTful API 设计自定义媒体类型,并研究了一些“标准”链接关系的类型和语义含义,以便为我的设计提供一些指导。
为了演示这个问题,假设我有一个可以执行标准读取、更改、删除方法的资源,并且我分别使用 GET、PUT 和 DELETE 的 HTTP 习惯用法来实现这些方法。
我可以合理地(重新)使用RFC5023中定义的“编辑”链接关系(来自IANA 链接注册表),其中规定:
"..."edit" 的值指定 href 属性的值是可编辑成员条目的 IRI。当出现在 atom:entry 中时,href IRI 可用于检索、更新和删除资源由那个条目代表......”
这样,用户代理可以理解具有“编辑”关系的链接将允许对资源进行 GET、PUT 和 DELETE。
然而,问题就在这里,如果资源状态被编辑使得资源现在只支持 GET 和 DELETE 操作,“编辑”关系就不再精确。
为了保持精度,我需要 i) 选项 A:指定另一个(复合)链接关系,仅支持 GET & DELETE,或 ii) 选项 B:为每个可能的状态转移指定单独的链接并使用适当的链接来指示允许的状态转移。后一种方法提供了精确性,但似乎过于冗长。
或者,(选项 C)我可以保留“编辑”关系并接受缺乏精度,即链接将传达 GET、PUT、DELETE 语义,但尝试 PUT 的用户代理将遇到 HTTP 错误' 405 - 不允许的方法'。但是,我对这种方法也不满意,因为它向客户端暗示了不支持的状态转换。
总而言之,问题是平衡链接关系通用性和精度的最明智的方法是什么?
rest - 真正的 RESTful 服务实例
就菲尔丁的论文(内容协商、超媒体等)而言,是否有任何真正 100% RESTful 的现实生活中的 Web 服务。我想更好地掌握 REST,并且需要我可以从像 Restfulie 这样的自动化客户端使用的东西。到目前为止,我遇到的所有声称是 RESTful 的东西实际上似乎都是 RPC 或 HTTP CRUD。
java - Java Jersey 声明式超链接 @Ref 注解使用
我一直在尝试扩展 Jersey 1.12 文档的第 6 章(声明性超链接)中提供的示例,但似乎在使用 @Ref 注释方面遇到了困难。
我的代码如下:
这适用于为 Widgets 集合对象的实例生成的 URL:
但是,我想知道如何将集合中的 Widget 实例的 id 附加到每个 Widget 的 URL。因此,生成的 URI 将类似于:
如果不开始硬编码 Widget 类中的整个路径值,我似乎找不到使用 Ref 注释的方法,如果可能的话,我想避免这种情况。
有没有实现这一目标的标准方法?
rest - 为 RESTful(超媒体)API 编写客户端
几天来,我一直在阅读“真正的”RESTful API,我想我已经接近于摸索它的内容了。
但我偶然发现的一件事是,我什至无法想象如何为“真正的”超媒体 API 编写客户端:
我读过的大多数例子都是关于浏览器和蜘蛛的,但这并不是特别有用:一个是人为导向的“智能”,另一个是愚蠢和“随机”的。就目前而言,我的印象是你需要学习人工智能才能让客户工作。
我不清楚的一件事是客户如何知道在任何给定链接上使用哪个动词?这是否隐含在 uri 的“rel”类型中?另一种选择(在这里阅读)似乎是使用 xhtml 并拥有一个可以解析和发布表单的客户端。
链接改变的可能性有多大,但链接的路径不会改变?在您看到的大多数示例中,路由和链接是相同的:
例如。如果我想建立一个客户端,它将把我从 Toni's Cake Shop 带回来的蛋糕列表:
当 Toni's 变成 Toni's Food Shop 并且链接变成 时会发生http://tonis.com/desserts/cakes
什么?
我们是否将初始cakes
链接保留在根目录以实现反向兼容性?如果没有,我们如何为被告知“去根,寻找蛋糕”的可怜的小代理进行“重定向”?
我错过了什么?
http - 设计 REST 服务时在请求的正文内容类型中使用的自定义媒体类型?
在创建自己的自定义媒体类型格式(例如 application/vnd.myapp+xml)时,客户端在发送正文内容时是否应该在自定义媒体类型中这样做?
例如,您将订单的表示放入 uri。内容应该是 application/vnd.myapp+xml,还是只是 xml,因为客户端不会包含链接等超媒体控件?
如果用户接受它(它应该),服务器将始终使用自定义媒体类型进行响应,但是客户端是否必须在其请求正文中使用它?
rest - 在 Backbone 中使用超媒体 (REST) API
在构建与 RESTful(希望如此)API 对话的 Backbone.js SPA 的过程中。我尝试围绕资源设计 API,使用超媒体将资源链接在一起。当我开始在 Backbone 中实现一些东西时,我开始意识到使用 Backbone 完成真正的超媒体可能并不合适。
主要问题是骨干路由器希望预先声明其路径。使用良好的超媒体 API,资源 URI 不应在客户端中硬编码,以便灵活地添加新功能和 ( gasp ) 更改资源位置。
我正在考虑将客户端级别的页面资源与 API 级别的对象资源分离的想法。如果这很疯狂,有人会尖叫。基本上,这意味着在我的主干应用程序中定义到资源的路由(想象一个离散页面),然后检索一个或多个 API 级别的资源。
这导致了一些有趣的问题:
这甚至是个好主意吗?我是否应该尽我所能在我的应用程序中重用 API 级别的资源 URI,以使路由是一对一的。
- 我意识到一个页面和一个api 对象只是同一资源的不同表示,但在大多数情况下,一个页面是多个资源的组合。或者我只是疯了:)
在一系列导航中间的页面刷新会发生什么。如果 API 级资源不同,我如何知道它们的位置?
在我看来,RESTful 设计强调发现而不是预先了解事物。我这样假设是对的吗?这就是代码下载的全部内容吗?如果我朝着正确的方向前进,有人可以指出我进一步阅读。
大多数资源都是只读的,因此只使用 GET 动词,但我确实有一些使用 POST/PUT 的场景(DELETE 确实不在这个特定客户端的域中,除了之前可能中止订单它已完全放置)。
*我只想说我绝不是 REST 大师。我仍在学习过程中,所以请随时告诉我我完全脱离了基地。没有感情会受到伤害。
编辑:
我一直在考虑更多与 SPA 相关的代码下载。还有几个选择:
在动态加载(代码下载)的“API”资源或类似资源中定义您的资源 URI。这是一个例子:
/li>在您浏览资源时动态定义您的路线,使用“根”资源 uri 作为您的路线。我相信 Backbone.Router.route 可以做到这一点,但我不确定是否可以即时执行。有没有人试过这个?
rest - 主干集合、REST 和裸阵列
在 Backbone 中,似乎鼓励收集资源返回裸数组。这似乎是由 Rails 做事模型驱动的,这根本不是做某事的好理由。我对此有一些问题:
- 通常,“集合”资源也需要围绕它的上下文。至少,我喜欢在响应中包含资源 URI 的约定。其他东西,如分页、小计(例如在购物车中)等,意味着集合很少是“裸露的”。
- 据说裸阵列存在安全问题。我在几个地方听说过这个,但需要一些参考来确认它。
另一方面,我可以看到“裸”数组如何使 API 更自然:
- 集合中每个对象的格式往往与在该集合中创建/更新对象时的格式相同。
- “集合”在语义上很好地映射到项目集合的概念。
免责声明:这里的前提可能完全有缺陷。我意识到 REST 不仅仅是 HTTP 动词和 JSON。
c# - 在 Web API 中生成超媒体链接
我很想知道其他人如何处理为他们的 Web API 生成超媒体链接的问题?具体来说,我正在使用 ASP.NET Web API,并且在让操作返回与超媒体相关的类型或返回资源本身以及让超媒体内容在管道中稍后发生之间左右为难。也就是说,人们是否倾向于做以下事情:
或者更像
然后在 HttpOperationHandler 或自定义格式化程序或其他东西中添加超媒体链接?
如果方法更像#2,你怎么知道要生成什么链接?只是有一些为所有 Order 对象生成的标准链接集?在 OrdersController 中装饰各种操作的属性?