1

我一直在研究一个网站,但似乎无法为其实施提出一个好的设计。这是流程:

用户选择一件衬衫。用户选择什么尺寸的衬衫。用户在上面说出他们想要的东西,然后将其添加到他们的购物车中。他们可以重复或去结帐。

我遇到的问题是将 line_item 添加到购物车中,它需要一个 sku 和一个设计记录。设计记录是在他们将其添加到购物车时创建的。

现在,我在 store_controller 中拥有一切。

所以我有诸如 prepare_for_cart、add_shirt_to_cart、confirm_order、add_design、show_receipt 之类的方法……我不知道我怎么可能把这些东西分解成安静的东西。

那么它是否总是可以用 REST 解决,还是真的有一些情况下它不起作用?怎么做才能尝试使它更易于维护和理解?还有其他适用的设计模式需要考虑吗?

4

2 回答 2

3

考虑资源,而不是您在商店中执行的操作。

创建控制器:订单、付款、衬衫、结帐等

而不是商店/结帐:

  • 订单/1/结帐 (POST)

您正在创建一个新的结帐资源,指的是一个订单。

而不是 store/attempt_order_payment:

  • 订单/1/付款 (POST)

您正在创建一个新的支付资源,指的是一个订单。

而不是 show_receipt:

  • 订单/1/付款/2/收据

您正在访问与付款对应的收据。

而不是 confirm_cart_not_empty:

  • 订单/1/衬衫 (GET)

订单有衬衫。如果衬衫在订单中,则表示购物车不是空的。

而不是 add_shirt_to_cart:

  • 订单/1/衬衫 (POST)

您正在订单中创建新的衬衫资源。

而不是 remove_from_cart:

  • 订单/1/衬衫/3(删除)

您正在从订单中删除衬衫资源。

等等...

PS - 有不止一种可能的解决方案

于 2012-10-22T11:11:46.403 回答
0

在几乎所有情况下,REST 都是可能的,但它并不总是最好的选择。例如,如果您有一个应该发送电子邮件的端点,您可以为这些创建唯一的 url:

POST emails/  (which creates)
GET emails/12345

与您的设计类似,可能会有如下网址:

cart/1234 (GET for the current cart contents, POST to add a new product to the cart)
cart/12345/shirt (1 specific item in the cart, which can be deleted)

可以帮助您考虑这一点的一件事是停止考虑 url 和最重要的方法。考虑您来回发送的文件。REST 中的“RE”代表表示,GET、PUT、DELETE 方法只是将表示从客户端传输到服务器的简单方法。

编辑

嗯,REST 是一个非常好的设计。它的设计不是为了易于实施,甚至是消耗......但它的设计是为了稳健,可以持续 10 年并保持向后兼容。就像网络本身一样。

这项投资对您来说可能不值得,您可能只是想使用一种更易于实施的方法。当然,您不会符合 REST-compliant™。这并不适合所有人,只要看看任何大供应商的平均 api 是如何工作的,就会意识到许多人已经决定应用 RESTful 设计。

因此,请自己弄清楚利弊;技术优势是最终唯一重要的东西。

你必须问“我如何制作这个 RESTful”这一事实告诉我,你需要先做更多的研究,并弄清楚一般 REST 的内容和原因。

于 2012-07-12T10:15:34.003 回答