当前位置: 首页 > 知识库问答 >
问题:

超媒体API:如何正确地编写文档?

冯淳
2023-03-14

问题的核心归结为文档,但可能是我没有正确理解其中的一个或多个方面。如果有,请告诉我:-)

假设我的API中有一个或多或少通用的链接关系(https://example.com/rels/accounts)来链接相关的帐户。确切的意思会随着上下文而改变,对吧?

  1. 在我的公告牌(或索引)上,我可能有一个与该关系的链接来浏览所有帐户。
  2. 在另一个资源(例如帐户组)上,它可能只链接到属于该组的帐户的特定子集。

这种关系本身似乎不是正确的地方。尤其是当您考虑到该URL的有效负载也可能根据上下文而改变时。在我们的示例中,如果在帐户组上有这种关系,则必须省略accountGroup字段,因为该值是由上下文提供的。

据我所知,我可以(也许应该)为API中的每个资源设置一个配置文件,记录资源本身。这将包括它的属性和可能出现的链接。这是我指定链接的确切含义的地方吗?

按照前面的示例,我是否会为profilehttps://example.com/profiles/account-group记录具有https://example.com/rels/accounts关系的链接链接到属于该组的帐户集合?

如果帐户集合资源具有关系类型https://example.com/rel/create-account的链接,我就麻烦大了,对吗?因为这是只包含某个组的帐户的帐户集合的信息没有编码在配置文件https://example.com/profiles/account-collection中,因此不能包含客户端在向该资源发布时必须省略accountGroup属性的信息。

  1. 我认为关系定义应该是弱的,并且不包含任何关于如何与它链接到的资源交互的信息,这是对的吗?
  2. 如果是这样,我可以期待从客户机遵循一个链接,然后发现他们可以做什么,基于该资源的配置文件。这似乎是错误的,尤其是对于状态转换。
  3. 如果概要文件应该记录客户端可能对链接的资源做什么,我就不能跨API中的多个“跳转”传输上下文,对吗?
  4. 我应该使用更多的配置文件和关系吗?https://example.com/profiles/global-accountshttps://example.com/profiles/account-group-accounts.

我想得越多,我肯定要么错过了一个关键的部分,要么它是可以用多种方法解决的东西。正因为如此,我意识到这个问题可能没有100%正确的答案。但也许有人能开导我,让我自己做出取舍?:)

共有1个答案

经俊茂
2023-03-14

让我们一次一个地总结一下你的观点:

1.基于语境的链接关系意义

将您的问题重新表述为代码上下文:当“getAccounts()”方法在类Billboard和AccountGroup中的含义不同时,我如何记录它?

客户知道它必须发布一个帐户,它将使用一些媒体类型,它认为适合这项任务。然后,服务器将告诉客户机该格式是否可接受,它还可以给出一个可接受的媒体类型列表作为回报。

3.记录概要文件

如果你所说的配置文件是指媒体类型,那么是的,你应该记录它们。实际上应该只记录媒体类型。

5.问题

>

  • 是的,关系不应定义如何与资源交互。媒体类型实际上可以做到这一点(比如表单定义它必须是一篇文章,等等),但通常不是必须的。

    是的,客户机不仅会发现可用的转换(链接),还会发现可用的方法。方法(GET、POST、PUT)总是意味着相同的事情,并且它们不在媒体类型中描述,因为媒体类型只描述表示,而不描述资源。服务器通常在响应中提交所有受支持的方法,或者显式地在对选项的响应中提交。

  •  类似资料:
    • 我现在正在读《实践中的Rest》一书。我无法理解以下术语超媒体,超媒体格式,超媒体控件,域应用协议。作者建议需要特定领域的超媒体格式。我很难理解这些。我在谷歌上搜索了这些术语,但没有找到正确的答案。谁能解释一下这些术语,以及为什么我们需要特定于领域的超媒体格式而不是应用程序/XML?

    • 我对编码很陌生。尝试用Java编写一个evaluatePostfix函数。我不断得到一个错误: 不兼容的类型:int不能转换为字符堆栈。push(eval(token,a,b)); 下面是我的代码块: 函数接受后缀表达式并计算结果。 这是我的eval函数:

    • 我存储用户收藏夹到json文件,但我得到以下错误: 未处理的异常:类型“\u InternalLinkedHashMap” 我将以下数据添加到文件中: 代码是: 我很困惑,不知道如何解决这个问题。

    • 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public

    • 问题内容: 我的软件包具有以下结构: 我不确定应如何正确写入文件。 的样子: 但是例如应该看起来如何?我的是: 什么时候应该使用? 问题答案: 很好-它有助于指导导入语句,而无需自动导入模块 http://docs.python.org/tutorial/modules.html#importing-from-a- package 使用和是多余的,仅需要 我认为在导入软件包中使用的最强大的理由之一

    • 我有一个带有ui路由器的AngularJS应用程序,它使用带有超媒体的REST API。一般的想法是让API为其各种调用生成URL,并防止客户机自己构造URL。 还有别的想法吗? 除非我在这方面非常错误,否则我不是在寻找模板化的解决方案,即API返回一个url模板的解决方案,该url模板需要客户机注入参数。关键在于url已经填充了数据,因为有些url比上面提供的示例要复杂得多。