Api 多个端点以公开同一资源的不同视图

Api 多个端点以公开同一资源的不同视图,api,rest,url,resources,endpoint,Api,Rest,Url,Resources,Endpoint,我正在努力寻找答案(可能是因为我没有正确地问这个问题) 我正在构建API以公开我正在创建的基本社交网络服务的资源。 我的理解是,API中URL的结构本质上是一个层次结构,类似于目录的结构。我认为这意味着我可以有多个端点来访问相同的资源或资源链接集合。 例如: 我有一个终点 www.domain.api.org/users/{:uid}/posts 它将返回用户发送的所有帖子或用户被标记的帖子。看起来还可以,但是如果我有一个端点,例如: www.domain.api.org/posts 当使用ht

我正在努力寻找答案(可能是因为我没有正确地问这个问题)

我正在构建API以公开我正在创建的基本社交网络服务的资源。 我的理解是,API中URL的结构本质上是一个层次结构,类似于目录的结构。我认为这意味着我可以有多个端点来访问相同的资源或资源链接集合。 例如:

我有一个终点

www.domain.api.org/users/{:uid}/posts

它将返回用户发送的所有帖子或用户被标记的帖子。看起来还可以,但是如果我有一个端点,例如:

www.domain.api.org/posts

当使用http GET点击时,将返回所有公共帖子(即所有用户的帖子加上他的朋友和公共帖子)

不同之处在于,第一个URL指向用户拥有的资源,而第二个URL指向公共资源(当然包括用户的帖子) 这些还好吗,还是我做得不对/不太明智


重申一下,我可以有多个端点指向同一资源的不同上下文/视图吗?

基本上应该避免相同资源的多个端点。然而,在这种特殊情况下,它是有意义的

您可以做的是向以下端点引入可选的查询参数
userId

www.domain.api.org/posts/?userId=<userId>
www.domain.api.org/posts/?userId=

如果这替代了你提到的第一个端点,那就是正确的选择。

我想在@Opal的答案中添加一个

这些可以吗,还是我做得不对/不太明智?

理想情况下,就像Opal提到的那样,您应该在url中使用queryParams。对于我构建的许多应用程序,我事先不知道从api返回的UID,因此选择一个项并将其作为查询参数传递到url中是有意义的。但是它还有一个额外的好处,就是把你的密钥放在你的url中,允许你把它作为书签,把url传递给另一个用户,他们会自动看到你想要他们看到的相同数据


迭代:您当前的实现是否错误?没有,但理想情况下,要创建端点,必须确保您立即获得以下信息:

  • 端点的名称
  • 状态:激活或未激活(必需)-端点是否激活或禁用
  • 服务配置文件(必需)-分配给端点的服务配置文件的ID
  • 资费配置文件(必需)-分配给端点的资费配置文件的ID
您可以添加其他可选信息,并确保端点的结构。
希望这对您有所帮助。

谢谢。回答得好。这让我彻底反思了我的url设计方法。特别是,在任何URL中都有users/:uid根本没有意义,因为只有登录并经过身份验证的用户才能查看该用户的资源,所以我只是将登录用户id保留在访问令牌(jwt)中在成功登录后创建。我认为对于像我这样仍然掌握良好url端点设计的人来说,这是值得指出的。为什么应该避免?任何研究、资源、标准,。。支持这项声明?如果不遵循这个“应该”会发生什么?而且,基于特定于项目的体系结构,甚至可能需要使用多个端点。“应该”的观点纯粹是主观的,除非有某种背景下的推理支持。