8. TECH TALKS
PHP Fast API by @toretto460
ZendFramework by @lorenzoferrara
Laravel by @malatestafra
MongoDB by @kekko
… take a look at http://roma.grusp.org/
19. Booking engine requirements
● A user should be able to find a hotel so that he can
check the availability.
● A user should be able to show a list of room with
details so that he can choose one of them.
● A user should be able to find a hotel for the given
check-in/check-out date so that he can make a
reservation by choosing a free room.
20. Booking engine APIs
● Check the hotel availability
● Show the room detail
● Book a room
● Check the room availability
● Modify a booking
● Cancel a booking
41. REST Constraints
● Client-Server model
● Stateless
● Cacheable
● Layered System
● Uniform Interface
○ Identification of resources
○ Manipulation of resources through these
representations
○ Hypermedia as the engine of application state
44. Booking engine APIs
● Check the hotel availability
● Show the room detail
● Book a room
● Check the room availability
● Modify a booking
● Cancel a booking
56. Check the Hotel availability
GET /api/hotels/12456/rooms?checkin=2015-10-01&checkout=2015-10-09&pax=3
HTTP/1.1 200 OK
Date: Sun, 27 Sep 2015 10:00:45 GMT
{
"error": "Hotel Not Found"
}
57. STATUS CODES
100 HTTP CONTINUE
101 HTTP SWITCHING PROTOCOLS
102 HTTP PROCESSING
201 HTTP CREATED
202 HTTP ACCEPTED
203 HTTP NON AUTHORITATIVE INFORMATION
204 HTTP NO CONTENT
205 HTTP RESET CONTENT
206 HTTP PARTIAL CONTENT
207 HTTP MULTI STATUS
208 HTTP ALREADY REPORTED
226 HTTP IM USED
300 HTTP MULTIPLE CHOICES
301 HTTP MOVED PERMANENTLY
302 HTTP FOUND
303 HTTP SEE OTHER
304 HTTP NOT MODIFIED
305 HTTP USE PROXY
306 HTTP RESERVED
307 HTTP TEMPORARY REDIRECT
308 HTTP PERMANENTLY REDIRECT
400 HTTP BAD REQUEST
401 HTTP UNAUTHORIZED
402 HTTP PAYMENT REQUIRED
403 HTTP FORBIDDEN
404 HTTP NOT FOUND
405 HTTP METHOD NOT ALLOWED
406 HTTP NOT ACCEPTABLE
407 HTTP PROXY AUTHENTICATION REQUIRED
408 HTTP REQUEST TIMEOUT
409 HTTP CONFLICT
410 HTTP GONE
411 HTTP LENGTH REQUIRED
412 HTTP PRECONDITION FAILED
413 HTTP REQUEST ENTITY TOO LARGE
414 HTTP REQUEST URI TOO LONG
415 HTTP UNSUPPORTED MEDIA TYPE
416 HTTP REQUESTED RANGE NOT SATISFIABLE
417 HTTP EXPECTATION FAILED
418 HTTP I AM A TEAPOT
422 HTTP UNPROCESSABLE ENTITY
423 HTTP LOCKED
424 HTTP FAILED DEPENDENCY
425 HTTP RESERVED FOR WEBDAV ADVANCED …
426 HTTP UPGRADE REQUIRED
428 HTTP PRECONDITION REQUIRED
429 HTTP TOO MANY REQUESTS
431 HTTP REQUEST HEADER FIELDS TOO LARGE
500 HTTP INTERNAL SERVER ERROR
501 HTTP NOT IMPLEMENTED
502 HTTP BAD GATEWAY
503 HTTP SERVICE UNAVAILABLE
504 HTTP GATEWAY TIMEOUT
505 HTTP VERSION NOT SUPPORTED
506 HTTP VARIANT ALSO NEGOTIATES EXPERIMENTAL
507 HTTP INSUFFICIENT STORAGE
...
200 HTTP OK SOAP is here
58. USE THE RIGHT STATUS CODE
GET /api/hotels/12456/rooms?checkin=2015-10-01&checkout=2015-10-09&pax=3
{...}
HTTP/1.1 200 OK
{"error": "Hotel Not Found"}
HTTP/1.1 404 Not Found
71. THE RESPONSE FOR THE
CUSTOMER
# The Customer (from Android client)
GET /api/hotels/12456/room/new HTTP/1.1
Host: mycompany.hotels
HTTP/1.1 403 Forbidden
72. THE RESPONSE FOR THE ADMIN
# The Admin (From the SPA in the backoffice)
GET /api/hotels/12456/room/new HTTP/1.1
Host: mycompany.hotels
HTTP/1.1 200 OK
{
"links": {
"ref": "action",
"method": "POST"
"href": "http://mycompany.hotels/api/hotels/12456/room"
}
room: {
"beds": {
"multiple": true,
"options": {
"single": {
"label": "Single"
},
"double": {
"label": "Double"
}
},
}
}
}
76. HATEOAS ISN’T A SILVER BULLET
The documentation is important,
but instead of explaining what to
look for and where, should explain
how to look and how to interpret
the resources.