我正在构建一个单页应用程序来预订酒店会议室,我不知道如何设置它,或者即使RESTful是正确的方法。这个SPA将有四个步骤:
同一个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?
感谢您的建议。
答案 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请求正文相同)