- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
2年前关闭。
Improve this question
我正在尝试围绕解决基于 REST 的 API 中的概念的最佳方法。不包含其他资源的平面资源没有问题。我遇到麻烦的地方是复杂的资源。
例如,我有一本漫画书的资源。 ComicBook
上面有各种属性,比如 author
, issue number
, date
等
一本漫画书也有一个列表1..n
覆盖。这些封面是复杂的对象。它们包含许多关于封面的信息:艺术家、日期,甚至是封面的 Base 64 编码图像。
对于 GET
在 ComicBook
我可以退回漫画,以及所有封面,包括他们的 base64 图像。对于获得一部漫画来说,这可能不是什么大问题。但是假设我正在构建一个客户端应用程序,它想要在一个表中列出系统中的所有漫画。
该表将包含来自 ComicBook
的一些属性。资源,但我们当然不想显示表格中的所有封面。返回 1000 本漫画书,每本漫画书都有多个封面,这将导致大量数据通过网络传输,在这种情况下,最终用户不需要这些数据。
我的直觉是做Cover
一个资源并拥有 ComicBook
包含封面。所以现在Cover
是一个 URI。 GET
现在的漫画作品,而不是巨大的 Cover
我们为每个封面发回一个 URI,客户可以根据需要检索封面资源。
现在我在创作新漫画时遇到了问题。当然,当我创建 Comic
时,我至少要创建一个封面。 ,实际上这可能是商业规则。
所以现在我被困住了,我要么通过首先提交 Cover
来强制客户执行业务规则。 ,获取该封面的 URI,然后 POST
正在ComicBook
在列表中使用该 URI,或者我的 POST
在 ComicBook
接收与吐出不同的资源。 POST
的传入资源和 GET
都是深拷贝,其中传出GET
s 包含对依赖资源的引用。Cover
资源在任何情况下都可能是必要的,因为我确定作为客户,我希望在某些情况下解决封面方向。所以无论依赖资源的大小如何,问题都以一般形式存在。一般来说,您如何处理复杂的资源而不强制客户端“知道”这些资源是如何组成的?
最佳答案
@ray,很好的讨论
@jgerman,不要忘记,仅仅因为它是 REST,并不意味着资源必须从 POST 开始。
您选择在资源的任何给定表示中包含什么取决于您。
您单独引用封面的情况仅仅是创建父资源(漫画书),其子资源(封面)可能会被交叉引用。例如,您可能还希望分别提供对作者、出版商、人物或类别的引用。您可能希望单独或在将它们作为子资源引用的漫画书之前创建这些资源。或者,您可能希望在创建父资源时创建新的子资源。
您对封面的具体情况稍微复杂一些,因为封面确实需要一本漫画书,反之亦然。
但是,如果您将电子邮件消息视为资源,而将发件人地址视为子资源,则显然仍然可以单独引用发件人地址。例如,从地址中获取所有内容。或者,使用以前的发件人地址创建新邮件。如果电子邮件是 REST,您可以很容易地看到许多交叉引用的资源可用:/received-messages、/draft-messages、/from-addresses、/to-addresses、/addresses、/subjects、/attachments、/folders 、/tags、/categories、/labels 等。
本教程提供了一个很好的交叉引用资源示例。
http://www.peej.co.uk/articles/restfully-delicious.html
这是自动生成数据的最常见模式。例如,您不要发布新资源的 URI、ID 或创建日期,因为这些是由服务器生成的。然而,当您取回新资源时,您可以检索 URI、ID 或创建日期。
您的二进制数据示例。例如,您希望将二进制数据作为子资源发布。当您获得父资源时,您可以将这些子资源表示为相同的二进制数据,或者表示为表示二进制数据的 URI。
表单和参数已经不同于资源的 HTML 表示。发布导致 URL 的二进制/文件参数并不是一件容易的事。
当您获取新资源的表单 (/comic-books/new) 或获取编辑资源的表单 (/comic-books/0/edit) 时,您需要的是资源的特定于表单的表示形式。如果您使用内容类型“application/x-www-form-urlencoded”或“multipart/form-data”将其发布到资源集合,则您要求服务器保存该类型表示。服务器可以使用已保存的 HTML 表示或其他形式进行响应。
出于 API 或类似目的,您可能还希望允许将 HTML、XML 或 JSON 表示发布到资源集合。
也可以按照您的描述来表示您的资源和工作流程,考虑到在漫画书之后发布的封面,但要求漫画书有封面。示例如下。
关于api - REST 复杂/复合/嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104578/
有人告诉我,如果我只有一个“东西”,比如家(不是多个家),我应该在 routes.rb 中使用资源 :home,而不是资源 :home。但是当我查看路由时,POST 函数似乎想要 home#creat
Activity 开始。这些代码框架顺利通过。 // Initialize array adapters. One for already paired devices and //
资源 search-hadoop.com search-hadoop.com索引所有邮件列表,非常适合历史搜索。当你遇到问题时首先在这里搜索,因为很可能有人已经遇到了你的问题。 邮件列表 在A
我是 WPF 的新手,正在努力使用位于单独程序集中的样式。这就是我正在做的:- 我有一个带有\Themes 文件夹的类库项目,其中包含一个“generic.xaml”,它合并了\Themes 内的子文
我正在编写一个使用虚拟树状文件结构的插件。基本上它就像一个包含文件的标准文件系统,区别在于这些文件实际上并不存在于文件系统中的特定位置,而只是 java 对象。 这些当前由使用 SettingProv
如果我在 XAML 中使用以下内容,我会收到错误消息: 错
我正在使用 laravel 资源来获取 api 的数据: return [ 'id' => $this->id, 'unread' =>
我有以下 pom.xml: 4.0.0 mycompany resource-fail 0.0.1-SNAPSHOT BazBat
许多GDI +类都实现IDisposable,但是我不确定何时应该调用Dispose。对于使用new或静态方法(例如Graphics.CreateGraphics)创建的实例来说,这很明显。但是,由属
我正在构建一组 RESTful 资源,其工作方式如下:(我将使用“people”作为示例): 获取/people/{key} - 返回一个人对象 (JSON) GET/people?first_nam
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一个使用 $resource 的简单 Controller : var Regions = $resource('mocks/regions.json'); $scope.regions =
在 Azure 门户中,如何查看不同资源之间的依赖关系。我特别想查看哪些资源正在使用我要删除的存储。 最佳答案 您可以使用应用程序洞察应用程序 map 来执行此操作: 您还可以打开存储帐户的日志记录:
我正在使用 ionic 生成资源(图标和启动画面)。我正在使用 ionic v2.1.0 和 cordova v6.4.0。 到目前为止我一直在使用(它在以前的版本中工作): cordova plat
是否可以使用 Assets 包含子文件夹中的文件? 示例:[base_url]/assets/css/pepper-grinder/jquery-ui-1.8.11.custom.min.css 最佳
我正在阅读一些尝试教授 Android 开发的书。在书中,作者概述了 res/下的一些目录。他提到 res/menu 包含基于 XML 的菜单规范。他还提到了保存“通用文件”的 res/raw。当我创
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我在服务器上使用 express-resource。在我的 AngularJS Controller 中: var User = $resource('/services/users/:use
因此,每当我运行我的应用程序时,它都会立即崩溃并给出以下错误: No package identifier when getting value for resource number 0x00000
对于我正在创建的(网络)应用程序,我需要使用基本身份验证在我的 UIWebView 中加载页面。 现在设置我使用的授权 header : NSString *result = [NSString st
我是一名优秀的程序员,十分优秀!