设计RESTful购物车

时间:2016-05-03 04:37:08

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

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

  1. 用户选择一个日期(可用日期来自服务器 - 某些天可以完全预订)。
  2. 用户选择会议室(从服务器检索在步骤1中选择的日期在此酒店提供的会议室)。
  3. 用户输入他们的姓名,地址,帐单信息。
  4. 用户看到确认页面。
  5. 同一个SPA将由具有相同数据库后端的多个酒店使用,而对于前端我正在考虑Ember。

    RESTful是否适用于此应用程序?

    我在想:

    获取/日期?hotel_id = xxx(我应该通过网址中的酒店ID与标头中的酒店ID进行比较吗?)

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

    POST /订单正文:{date,conference_room_id,姓名/地址/结算信息},返回{confirmation_id}

    名称/地址/帐单信息是否应该放入单独的POST?

    感谢您的建议。

3 个答案:

答案 0 :(得分:0)

获取/日期?hotel_id = xxx(我应该通过网址中的酒店ID与标头中的酒店ID进行比较吗?)

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

POST /订单正文:{date,conference_room_id,姓名/地址/结算信息},返回{confirmation_id}

您的解决方案可以使用Restful API方法。因为它允许任何其他组件直接调用您的API。它可以是APP,网站或插件,也可以是连接到互联网的另一个java程序,只需要触发你的API即可。

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

获取/日期/酒店/ - >在特定的日子为您提供所有酒店的所有客房 获取/日期/酒店/ - >为您提供特定酒店的可用房间列表(使用日期/ hotel_id而不是日期/?hotel_id = xxx)。应使用参数来过滤结果。例如。 dates / hotels / hotel_id?PIN = 142:这应该是给你的针脚匹配142的酒店 日期/酒店?MAX_RECORD = 50:这应该会给你酒店列表,但限制为50

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

的更多信息

答案 1 :(得分:0)

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

RESTful API中的每个设计GET是为请求数据而定义的。 对于POST,我不会分成单独的POST,但你可以在URL中加入一些像hotel_id或date这样的参数。

最佳

费边

答案 2 :(得分:0)

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

获取 /hotels/{hotel_id}/dates

Path params:

  • 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

Path params:

  • hotel_id必需
  • date_id必需

查询参数:

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

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

注意:此类实施允许列出日期和房间的不同组合(例如,在可用日期内预订的房间)。

发布 /hotels/{hotel_id}/reservations

Path params:

  • 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}

Path params:

  • hotel_id需要
  • reservation_id必需

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