A RESTful API for
Consumer Review Service
RESTful URLs
Refer to Resources and their Identifiers in URL
Example Template:
/Resource/Resource_Identifier/Sub_Resource/Sub_Resource_Identifier
Sample Review URL
/Consumer/{consumer_id}/review/{review_id}
/Dealer/{dealer_id}/review/{review_id}
Building a RESTful API
Have a common set of Resource(and/or Sub Resources)
/Consumer/{consumer_id}/reviews
Use HTTP verbs to accomplish different operations:
GET /Consumer/123/reviews
- give me all reviews for Consumer: 123
POST /Consumer/123/reviews
- Submit a review for Consumer 123
PUT /Consumer/123/reviews
- Update a batch of reviews for Consumer 123
DELETE /Consumer/123/reviews
- Delete All reviews for consumer 123
Building a RESTful API
For a Single Resource eg: A Review for a Consumer:
Base URL:
/Consumer/{consumer_id}/reviews/{review_id}
Http Verbs:
GET /Consumer/123/reviews/456
- Give me a Review(id 456) for Consumer(id 123)
PUT /Consumer/123/reviews/456
- Update A Consumer(id 123) Review (id 456)
DELETE /Consumer/123/reviews/456
- Delete a Consumer Review (456)
POST /Consumer/123/reviews/456
- ERROR: POST cannot be done for a resource already created
Filtration
Use QueryString parameters to filter reviews
1. Show only featured reviews:
GET /Consumer/{consumer_id}/reviews?featured=true
2. Show review with Service
GET /Consumer/{consumer_id}/reviews?filterBy=service
3. Show reviews for New Car
GET /Consumer/{consumer_id}/reviews?filterBy=newcar
Versioning
Using a Simple Major.Minor Scheme
http://services.cars.com/CRRS/1.2/Consumer/123/reviews/
Filter Fields
Sometimes a consumer is only interested in a specific field set
eg: Mobile consumers where Payload size is a concern
Use Query String for field filtration
/Consumer/{consumer_id}/reviews?fields=Reviews.OverallRating,Reviews.location
Pagination
For Pagination, again use Query String parameters
/Consumer/{consumer_id}/reviews?start=50&count=20
Response Formats
1. JSON
2. XML
By Default will return responses in JSON format
1. Use Format type at the end of the URL
/Consumer/123/reviews.json
2. Use Accept Header
Accept: application/json
3. Use a type query parameter to indicate response type
/Consumer/123/reviews?responseType=json
Searching For Reviews
Since a search is not tied to a specific resource, use a search url with a query parameter at the base URL level:
http://services.cars.com/CRS/search?status=VAL
http://services.cars.com/CRS/search?status=PEN
http://services.cars.com/CRS/search?zip=60630&make=toyota
Return Codes
Use HTTP Return codes
200 - OK
- Review Retreival was successful
- Review was POSTed
- Review was DELETEd
400 - Bad Request
- Request from client was syntactically bad
404 - Resource Not Found
- Review was not found
- Consumer was not found
500 - Internal Server Error
- Service failure
Additional Code Refinements:
201 - Created
- A review was created
- A response was created
- A feedback was created
Dealer Review Service
By Ahmed Bhaila
Dealer Review Service
- 124