web-services - 创建一对一的 RESTful API 关系

标签 web-services rest http web

我需要在 Game 之间创建一对一关系和一个 Site - 每场比赛发生在一个网站。在我的数据库中,site是指向 Site 的 Game 对象的一个​​属性对象。

我在互联网上找不到太多相关信息,这些是我的想法:

GET /game/<game_id>/site

获取游戏站点,隐藏站点 id。

POST /game/<game_id>/site

创建游戏站点,创建游戏时仅使用一次。

PUT /game/<game_id>/site

更新游戏站点

DELETE /game/<game_id>/site

删除游戏站点。

但是如果有人想获得所有站点的列表怎么办?我应该添加 /sites 吗? URI 并具有 get Site 的方法对象检测是否为 game_id已经通过了吗?我还应该让人们通过 /sites/<site_id> 访问网站吗?或者我应该让客户填写他们自己的 sites 列表吗?通过遍历所有 games ?最后,我通常为每个对象设置一个“href”属性,它是指向自身的链接。如果我采用上述设计(包括 /sites/ URI),我是否链接到 /game/<game_id>/site/sites/<site_id> ?是否应该有两个地方可以访问相同的信息?

我走在正确的轨道上吗?或者是否有更好的方法在 REST 中对一对一关系进行建模?

如果重要的话,我正在使用 Flask-RESTful 来制作我的 API。

最佳答案

你的想法很有道理。

最大的区别在于是否 site可以独立于 game 存在.听起来好像可以。例如,两个游戏可能指向同一个站点。

据我对 RESTful API 设计的理解,公开相同的 site 没有问题通过这两个资源 /game/<game_id>/site并通过/sites/<side_id> .但 REST 鼓励您通过超媒体链接数据。

公开site在两个不同的地方可能会使事情复杂化,因为您随后希望能够通过这两个 URL 与站点对象进行交互。

为了使您的结构明确和简单,我的建议是:

按照链接对象设计,您的 game资源表示将包括如下内容:

{
  "game_id": 10,
  ...,
  "link": {
    rel: resource/site
    href: /api/sites/14
  }
}

如果没有更多的设计工作,这意味着您将再次调用以获取该网站的信息。每个设计都有其妥协:)

关于web-services - 创建一对一的 RESTful API 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097309/

相关文章:

android - 使用 oAuth 的 RESTful Web 服务用于移动应用程序

web-services - 关于正确 REST 设计的问题

c# - 从 webapi c# 发送 POST 请求到 onesignal url

php - 本地主机 header 重定向到本地主机/链接

java - WebService 在 WebLogic 10.3 中不是 "visible"

c# - 如何覆盖 Web Services .Net 中的 Wsdl 生成

node.js - 具有不同参数的多个路由,调用相同的资源

java - 如何从 Dropwizard 服务发回一条简单的消息?

javascript - AngularJS 将 HTML 传递到 $scope

java - ImageIO.read() 返回 403 错误