Simple Social Media API test
797
Alguns exemplos sobre como chamar o SocialMediaRestAPI.
Abstrato:
Esta aplicação trata de três recursos: Usuário (users), Amizade (friendships) e Postagens (posts). Todo o conteúdo deste aplicativo é aberto a todo aquele que acessar o sistema, parecendo "Twitter" em uma forma muito simples, de modo que a leitura de dados que você não vai precisar autenticar-se, mas quando chega a hora de publicar e fazer amizades, então será necessária autenticação. A autenticação no sistema foi feito usando Authorition Basic, então espera-se que este aplicativo será executado através de HTTPS.
As tecnologias aplicadas a este projecto foram Zend Framework 2, Módulo Doctrine, PHPUnit e zend-mvc-auth para lidar com os cabeçalhos de autorização.
A escolha sobre estas bibliotecas foi baseada no meu conhecimento sobre eles, e também na quantidade de documentação que existe das mesmas.
Link para o processo de Instalação/Execução: clique aqui
Mais abaixo estão as funções e formas de uso da solução construída. Essa documentação foi criada com base na seguinte coleção do Postman: https://www.getpostman.com/collections/ad1379f35c25b4c0a8bc, a documentação gerada pelo Postman pode ser acessada aqui: https://documenter.getpostman.com/collection/view/69638-c7efcf2e-dce5-73d0-4596-caf3a7dc5a41
http://localhost:8080/api/users
Cria um novo usuário no sistema validando para que o mesmo e-mail não seja utilizado duas vezes.
| BODY | |
|---|---|
| name | Lucas dos Santos Abreu |
| username | [email protected] |
| password | 123456 |
curl -X POST \
--url http://localhost:8080/api/users \
--data 'name=Lucas%20dos%20Santos%20Abreu&username=lucas.s.abreu%40gmail.com&password=123456'
http://localhost:8080/api/users/self
Mostra dados sobre o usuário logado que podem ser utilizados para orientação para a aplicação que vier a consumir o mesmo.
Uma vez que seja informado usuário e senha corretos será retornado um JSON no seguinte formato:
{
"result": {
"id": 11,
"name": "Lucas dos Santos Abreu",
"username": "[email protected]"
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X GET \
--url http://localhost:8080/api/users/self \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/users
Retorna os usuário cadastrados no sistema no momento, suporta filtro por nome de usuário e paginação.
| Parâmetros | |
|---|---|
| limit | Número de registros por página, limitado a 50 |
| offset | Ponto para iniciar a listagem de registros |
| q | filtro de página, o valor deve estar no formato: "q=name:Lucas", o sistema irá processar um like no banco o termo %Lucas% dessa forma. |
{
"result": [
{
"id": 1,
"name": "Joãozinho"
},
{
"id": 2,
"name": "Lucas dos Santos Abreu"
}
],
"paging": {
"count": 2,
"total": 2,
"offset": 0
}
}
curl -X GET \
--url http://localhost:8080/api/users
http://localhost:8080/api/users/[:id]
Retorna as informações do usuári do ID passado.
{
"result": {
"id": 11,
"name": "Lucas dos Santos Abreu"
}
}
curl -X GET \
--url 'http://localhost:8080/api/users/[:id]'
http://localhost:8080/api/users/[:id]
Permite alterar o nome do usuário informado pelo ID.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
{
"result": {
"id": 11,
"name": "Lucas dos Santos Abreu"
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
| BODY | |
|---|---|
| name | Lucas Abreu |
curl -X PUT \
--url 'http://localhost:8080/api/users/[:id]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--data name=Lucas%20Abreu
http://localhost:8080/api/users/[:id]/change-password
Permite que seja alterada a senha do usuário do parâmetro.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
| BODY | |
|---|---|
| password | 123456 |
| newPassword | 654321 |
curl -X PUT \
--url 'http://localhost:8080/api/users/[:id]/change-password' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--data 'password=123456&newPassword=654321'
http://localhost:8080/api/users/[:id]
Permite eliminar um usuário de acordo com o parâmetro.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X DELETE \
--url 'http://localhost:8080/api/users/[:id]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/users/[:userId]/friends
Criar uma nova relação de amizade entre o usuário da URL e do parâmetro id.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
{
"result": {
"id": 8,
"name": "Joãozinho"
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
| BODY | |
|---|---|
| id | [:idFriend] |
curl -X POST \
--url 'http://localhost:8080/api/users/[:userId]/friends' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--data id=%5B%3AidFriend%5D
http://localhost:8080/api/users/[:id]/friends
Permite listar as amizades do usuário da URL
{
"result":
[
{
"id": 8,
"name": "Joãozinho"
}
]
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X GET \
--url 'http://localhost:8080/api/users/[:id]/friends' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/users/[:idUser]/friends/[:idFriend]
Permite eliminar uma relação de amizade entre os dois usuários do parâmetro da URL.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X DELETE \
--url 'http://localhost:8080/api/users/[:idUser]/friends/[:idFriend]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/posts
Permite criar uma nova Postagem para o usuário autorizado no sistema. Somente é informado o texto da mensagem.
Apenas irá funcionar se o usuário do parâmetro for o mesmo que esta logado.
{
"result": {
"id": 9,
"userId": 11,
"datePublish": "2016-07-30 03:55:53",
"text": "something funny"
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
| BODY | |
|---|---|
| text | something funny |
curl -X POST \
--url http://localhost:8080/api/posts \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
--form 'text=something funny'
http://localhost:8080/api/posts
Retorna as Postagens de todo o sistema, essa função permite paginação dos resultados e filtro de texto.
| Parâmetros | |
|---|---|
| limit | Número de registros por página, limitado a 50 |
| offset | Ponto para iniciar a listagem de registros |
| q | filtro de página, o valor deve estar no formato: "q=text:funny", o sistema irá processar um like no banco o termo %funny% dessa forma. |
{
"result":
[
{
"id": 10,
"userId": 11,
"datePublish": "2016-07-30 03:57:33",
"text": "something funny"
},
{
"id": 9,
"userId": 11,
"datePublish": "2016-07-30 03:55:53",
"text": "something funny"
},
{
"id": 4,
"userId": 8,
"datePublish": "2016-07-29 23:26:39",
"text": "ola"
}
],
"paging": {
"count": 3,
"total": 3,
"offset": 0
}
}
curl -X GET \
--url http://localhost:8080/api/posts
http://localhost:8080/api/posts?q=text:funny
Retorna as Postagens de todo o sistema, essa função permite paginação dos resultados e filtro de texto.
| Parâmetros | |
|---|---|
| limit | Número de registros por página, limitado a 50 |
| offset | Ponto para iniciar a listagem de registros |
| q | filtro de página, o valor deve estar no formato: "q=text:funny", o sistema irá processar um like no banco o termo %funny% dessa forma. |
{
"result":
[
{
"id": 10,
"userId": 11,
"datePublish": "2016-07-30 03:57:33",
"text": "something funny"
},
{
"id": 9,
"userId": 11,
"datePublish": "2016-07-30 03:55:53",
"text": "something funny"
}
],
"paging": {
"count": 2,
"total": 2,
"offset": 0
}
}
curl -X GET \
--url 'http://localhost:8080/api/posts?q=text%3Afunny'
http://localhost:8080/api/posts/user/[:id]
Permite listar todas as Postagens de UM usuário, como um perfil, esta função permite paginação e filtro.
| Parâmetros | |
|---|---|
| limit | Número de registros por página, limitado a 50 |
| offset | Ponto para iniciar a listagem de registros |
| q | filtro de página, o valor deve estar no formato: "q=text:funny", o sistema irá processar um like no banco o termo %funny% dessa forma. |
{
"result":
[
{
"id": 10,
"userId": 11,
"datePublish": "2016-07-30 03:57:33",
"text": "something funny"
},
{
"id": 9,
"userId": 11,
"datePublish": "2016-07-30 03:55:53",
"text": "something funny"
}
],
"paging": {
"count": 2,
"total": 2,
"offset": 0
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X GET \
--url 'http://localhost:8080/api/posts/user/[:id]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/feed
Retorna o Feed do usuário autenticado, sendo com## POSTa das próprias Postagens do usuário e de seus amigos. É possível usar paginação e filtragem.
| Parâmetros | |
|---|---|
| limit | Número de registros por página, limitado a 50 |
| offset | Ponto para iniciar a listagem de registros |
| q | filtro de página, o valor deve estar no formato: "q=text:funny", o sistema irá processar um like no banco o termo %funny% dessa forma. |
{
"result": [
{
"id": 10,
"userId": 11,
"datePublish": "2016-07-30 03:57:33",
"text": "something funny"
}, {
"id": 9,
"userId": 11,
"datePublish": "2016-07-30 03:55:53",
"text": "something funny"
}, {
"id": 4,
"userId": 8,
"datePublish": "2016-07-29 23:26:39",
"text": "ola"
}
],
"paging": {
"count": 3,
"total": 3,
"offset": 0
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X GET \
--url http://localhost:8080/api/feed \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/posts/[:id]
Retorna a data de publicação, Id do usuário, texto e Id da mesma.
{
"result": {
"id": 10,
"userId": 11,
"datePublish": "2016-07-30 03:57:33",
"text": "something funny"
}
}
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X GET \
--url 'http://localhost:8080/api/posts/[:id]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'
http://localhost:8080/api/posts/1
Modifica o texto da Postagem informada no parâmetro da URL.
Apenas irá funcionar se o usuário autenticado for o mesmo que esta publicou a Postagem.
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
| BODY | |
|---|---|
| text | not that funny |
curl -X PUT \
--url http://localhost:8080/api/posts/1 \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--data text=not%20that%20funny
http://localhost:8080/api/posts/[:id]
Permite eliminar a Postagem informada na URL.
Apenas irá funcionar se o usuário autenticado for o mesmo que esta publicou a Postagem.
| HEADERS | |
|---|---|
| Authorization | Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2 |
curl -X DELETE \
--url 'http://localhost:8080/api/posts/[:id]' \
--header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
--header 'content-type: multipart/form-data; boundary=---011000010111000001101001'
A execução pode ser feita diretamente usando o comando abaixo dentro da pasta do projeto:
$ php -S 0.0.0.0:8080 -t public/ public/index.php
As regras abaixo foram traduzidas do README.md do ZendSkeletonApplication
Para instalar no Apache, configure um "virtual host" apontando para pasta public/ do projeto e você já estará pronto para rodar ! Deve se parecer com o exemplo abaixo:
<VirtualHost *:80>
ServerName social-media-api.localhost
DocumentRoot /caminho/para/social-media-api/public
<Directory /caminho/para/social-media-api/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
</VirtualHost>
Para instalar no nginx, abra o seu arquivo /path/to/nginx/nginx.conf e adicione um
incluir diretório como abaixo
no bloco http, se ainda não existir:
http {
# ...
include sites-enabled/*.conf;
}
Crie um arquivo de configuração de virtual host para o seu projeto em /path/to/nginx/sites-enabled/social-media-api.localhost.conf
deve paracer como abaixo:
server {
listen 80;
server_name social-media-api.localhost;
root /caminho/para/social-media-api/public;
location / {
index index.php;
try_files $uri $uri/ @php;
}
location @php {
# Pass the PHP requests to FastCGI server (php-fpm) on 127.0.0.1:9000
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /caminho/para/social-media-api/public/index.php;
include fastcgi_params;
}
}
Reinicie o nginx, agora você deve estar pronto para ir !
Content type
Image
Digest
Size
185.2 MB
Last updated
over 9 years ago
docker pull lucassabreu/social-media-api