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/シャツ(ポスト)

オーダーで新しいシャツ リソースを作成しています。

remove_from_cart の代わりに:

  • order/1/shirt/3 (削除)

注文からシャツのリソースを削除しています。

等々...

PS - 考えられる解決策は複数あります

于 2012-10-22T11:11:46.403 に答える
0

ほとんどすべての場合、RESTが可能ですが、常に最良の選択であるとは限りません。たとえば、電子メールを送信する必要があるエンドポイントがある場合、これらの一意のURLを作成できます。

POST emails/  (which creates)
GET emails/12345

あなたのデザインと同様に、次のようなURLを持つことが可能です。

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)

これについて考えるのに役立つかもしれないことの1つは、URLと最も重要なメソッドについて考えるのをやめることです。送受信するドキュメントについてのみ考えてください。RESTの「RE」は表現を表します。GET、PUT、DELETEメソッドは、クライアントからサーバーに表現を転送するための単純な手段です。

編集

そうですね、RESTはとても素敵なデザインです。実装や消費が簡単になるようには設計されていませんが、堅牢性を考慮して設計されており、10年間持続し、下位互換性を維持できます。ウェブ自体と同じように。

この投資はあなたにとって価値がないかもしれません、あなたは単に実装するのがより簡単なアプローチを使いたいかもしれません。もちろん、REST準拠™にはなりません。すべての人が利用できるわけではありません。大手ベンダーの平均的なAPIがどのように機能するかを一目見れば、多くの人がRESTfulな設計を適用しないことに決めていることがわかります。

だから、あなた自身のために賛否両論を理解してください。最終的に重要なのは技術的なメリットだけです。

「どうすればこのRESTfulを作成できるか」を尋ねる必要があるという事実は、最初にさらに調査を行い、RESTの一般的な内容と理由を理解する必要があることを示しています。

于 2012-07-12T10:15:34.003 に答える