【问题标题】:Designing RESTful shopping cart设计 RESTful 购物车
【发布时间】:2016-05-03 04:37:07
【问题描述】:

我正在构建一个用于预订酒店会议室的单页应用程序,但不确定如何设置它,或者即使 RESTful 是正确的方法。此 SPA 将分为四个步骤:

  1. 用户选择一个日期(可用日期来自服务器 - 某些日子可能已订满)。
  2. 用户选择一个会议室(从服务器检索在步骤 1 中选择的日期在该酒店可用的会议室)。
  3. 用户输入他们的姓名、地址、帐单信息。
  4. 用户看到确认页面。

相同的 SPA 将被具有相同数据库后端的多家酒店使用,而我认为是 Ember 的前端。

RESTful 是这个应用程序的正确方法吗?

我在想:

GET /dates?hotel_id=xxx(我应该在 URL 中传递酒店 ID,还是在标题中传递,还是在正文中传递?)

GET /rooms?hotel_id=xxx&date=yyy(我应该将日期和hotel_id 传递进去,还是以某种方式在服务器上记住它?)

POST /order with body: {date, meeting_room_id, name/address/billing info},返回 {confirmation_id}

是否应将姓名/地址/帐单信息放入单独的 POST 中?

感谢您的建议。

【问题讨论】:

    标签: rest ember.js single-page-application


    【解决方案1】:

    在 REST(ful) 框架中没有会话的概念。每个请求都必须发送所有必需的信息以识别资源。 我将根据您提供的要求在下面发布一个示例。

    获取 /hotels/{hotel_id}/dates

    路径参数:

    • hotel_id必填

    查询参数:

    • startDate可选,默认:今天)
    • endDate可选,默认(示例):今天 + 3 个月)
    • status可选"available"/"booked"/"all",默认:"all"

    回复正文:[{"id":"20160503", "dateStr":"May 5th 2016", "status": "available"}]

    获取 /hotels/{hotel_id}/dates/{date_id}/rooms

    路径参数:

    • hotel_id必填
    • date_id必填

    查询参数:

    • status可选"booked"/"available"/"all",默认:"all"

    回复正文:[{"id": "12", "status": "available", "reservationId": ""}, {"id: "13", "status": "booked", "reservationId" : "123"}]

    注意:这种实现方式允许列出日期和房间的不同组合(例如,可用天数的预订房间)。

    发布 /hotels/{hotel_id}/reservations

    路径参数:

    • hotel_id(必填)

    请求正文:{"dateId":"20160503", "roomId":"12", "firstName":"John", "lastName":"Doe", "address": "xxx", "vatNumber" : "yyy", "companyName": "zzz"}

    注意:如果您将帐单地址存储为单独的实体(例如,如果您的服务器需要“记住”它们),那么为帐单地址 (/billing) 实施 POST 和 GET 服务并引用它们会很有用带有适当的标识符。

    回复正文:{"reservationId" : "324"}

    获取 /hotels/{hotel_id}/reservations/{reservation_id}

    路径参数:

    • hotel_id(必填)
    • reservation_id必填

    响应正文:{"dateId":"20160503", "roomId":"12", "firstName":"John", "lastName":"Doe", "address": "xxx", "vatNumber" : "yyy", "companyName": "zzz"}(与 POST 请求正文相同)

    【讨论】:

    • 谢谢,这个答案帮助我开发了一个解决方案。
    【解决方案2】:

    GET /dates?hotel_id=xxx(我应该在 URL 中传递酒店 ID,还是在标题中传递,还是在正文中传递?)

    GET /rooms?hotel_id=xxx&date=yyy(我应该将日期和hotel_id 传递进去,还是以某种方式在服务器上记住它?)

    POST /order with body: {date, conference_room_id, name/address/billing info},返回 { Confirm_id }

    您的解决方案可以使用 Restful API 方法。因为它使任何其他组件都可以直接调用您的 API。可以是APP,也可以是网站或插件,也可以是其他联网的java程序,只要触发你的API就可以了。

    您为应用程序提到的 URL,请注意在构建 RESTful api 时应使用基于资源的 URL 方法。

    GET /date/hotels/ -> 为您提供当天所有酒店的所有可用房间 GET /dates/hotels/ -> 为您提供特定酒店的可用客房列表(使用 dates/hotel_id 而不是 dates/?hotel_id=xxx)。参数应该用于过滤您的结果。例如。 dates/hotels/hotel_id?PIN=142:这应该为您提供 pin 匹配 142 的酒店 dates/hotels?MAX_RECORD=50:这应该给你酒店列表,但限制为 50

    您可以找到更多关于创建基于资源的 Restful API https://www.youtube.com/playlist?list=PLqq-6Pq4lTTZh5U8RbdXq0WaYvZBz2rbn

    【讨论】:

      【解决方案3】:

      我会按照设计将“选择”放入 GET 中。 例如日期 GET /hotel/:id/date -> 获取所有可用日期 rooms GET /hotel/:id/date/:date/rooms -> 获取所有可用房间

      RESTful API GET 中的每个设计都是为请求数据而定义的。 对于 POST,我不会分解为单独的 POST,但您可以将一些参数(例如 hotel_id 或 date)放入 URL。

      最好的 费边

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-29
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 2011-08-12
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多