por Ricardo Plansky
Ricardo Plansky - Analista Desenvolvedor @ Leroy Merlin Brasil
- Formado em Análise e Desenvolvimento de Sistemas
- 11 anos de experiência com programação
- 09 anos com PHP OO
- Áreas: Marketing Digital, Business Intelligence, Telecom e, agora, e-commerce varejista.
opcional
Um webservice simples para
gerenciamento de usuaŕios e seus respectivos hobbies
É a ausência de qualquer regra.
POST http://api.meetuplaravelsp.com/call{
"action": "createUser",
"parameters": {
"username": "rplansky",
"password": "letmein",
"hobbies": [
"football",
"drawing",
"skating"
]
}
}criar usuário
POST http://api.meetuplaravelsp.com/call{
"action": "deleteUser",
"parameters": {
"username": "rplansky"
}
}deletar usuário
POST http://api.meetuplaravelsp.com/call{
"action": "removeHobbie",
"parameters": {
"username": "rplansky",
"hobbie": "football"
}
}deletar hobbie
<?php
class MagicController
{
public function call($action, array $parameters = array())
{
switch ($action) {
case 'createUser':
// Some code
break;
case 'deleteUser':
// Some code
break;
case 'removeHobbie':
// Some code
break;
...
}
}
}POST http://api.meetuplaravelsp.com/user/create{
"username": "rplansky",
"password": "letmein",
"hobbies": [
"football",
"drawing",
"skating"
]
}POST http://api.meetuplaravelsp.com/user/delete{
"username": "rplansky"
}POST http://api.meetuplaravelsp.com/user/rplansky/hobbie/remove{
"hobbie": "football"
}class UserController
{
public function create($parameters)
{
// Some code
}
public function delete($username)
{
// Some code
}
}class HobbieController
{
public function delete($username, $hobbie)
{
// Some code
}
}Aplicação de verbos HTTP
POST http://api.meetuplaravelsp.com/user{
"username": "rplansky",
"password": "letmein",
"hobbies": [
"football",
"drawing",
"skating"
]
}{}DELETE http://api.meetuplaravelsp.com/user/rplansky{}DELETE http://api.meetuplaravelsp.com/user/rplansky/hobbie/footballHypermedia As The Engine Of Application State
É prover uma maneira do cliente interagir com o serviço inteiramente por hipermídia.
Deixar claro como é feita a comunicação com os seus recursos e fornecer as informações necessárias para isso
GET http://api.meetuplaravelsp.com/{
"name": "Meetup Laravel SP API",
"version": "1.4-beta",
"_links": [
{
"rel": "user",
"_links": [
{"rel": "create", "href": "/user", "method": "POST"},
{"rel": "delete", "href": "/user", "method": "DELETE"},
{"rel": "list", "href": "/user", "method": "GET"},
{"rel": "hobbie", "_links": [
...
]}
]
}
}
}{
"user": {
"username": "rplansky",
"password": "letmein",
"hobbies": ["football", "drawing", "skating"]
},
"_links": [
{"rel": "self", "href": "/user/rplansky", "method": "GET"},
{"rel": "delete", "href": "/user/rplansky", "method": "DELETE"},
{"rel": "addHobbie", "href": "/user/rplansky/hobbie", "method": "POST"}
{"rel": "hobbies", "href": "/user/rplansky/hobbie", "method": "GET"}
]
}POST http://api.meetuplaravelsp.com/user{
"username": "rplansky",
"password": "letmein",
"hobbies": ["football", "drawing", "skating"]
}request
response
POST http://api.meetuplaravelsp.com/userPOST HTTP/1.1 201 Created
content-type: application/json; charset=UTF-8
date: Wed, 01 Apr 2015 18:06:36 GMT
status: 201 Created
version: HTTP/1.1
Location: http://api.meetuplaravelsp.com/user/rplanskyPOST http://api.meetuplaravelsp.com/user/rplansky/hobbie{
"user": {
"username": "rplansky",
"password": "letmein",
"hobbies": ["football", "drawing", "skating", "new-hobbie"]
},
"_links": [
{"rel": "self", "href": "/user/rplansky/hobbie/new-hobbie", "method": "GET"},
{"rel": "parent", "href": "/user/rplansky", "method": "GET"},
{"rel": "delete", "href": "/user/rplansky/hobbie/new-hobbie", "method": "DELETE"},
{"rel": "add", "href": "/user/rplansky/hobbie", "method": "POST"},
{"rel": "list", "href": "/user/rplansky/hobbie", "method": "GET"}
]
}{
"hobbie": "new-hobbie"
}request
response
Paginação de usuários nesse nosso webservice
GET http://api.meetuplaravelsp.com/user/page/2{
"page": 2,
"limit": 10,
"users": [
{
"username": "rplansky",
"password": "letmein",
"hobbies": [
"football",
"drawing",
"skating",
"new-hobbie"
]
},
{...}
]
"_links": [
{"rel": "add", "href": "/user", "method": "POST"},
{"rel": "next", "href": "/user/page/3"},
{"rel": "prev", "href": "/user/page/1"},
]
}{
"title": "User Example Schema",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": ["firstName", "lastName"]
}