Sign inSign up

lucassabreu/social-media-api

By lucassabreu

Updated over 9 years ago

Simple Social Media API test

Image
0

797

lucassabreu/social-media-api repository overview

Social Media API wercker status

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

POST Criar Novo Usuário

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
nameLucas dos Santos Abreu
username[email protected]
password123456
Exemplo Chamada em cURL
curl -X POST \
  --url http://localhost:8080/api/users \
  --data 'name=Lucas%20dos%20Santos%20Abreu&username=lucas.s.abreu%40gmail.com&password=123456'

GET Dados do Usuário Logado

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:

Retorno:
{ 
    "result": { 
        "id": 11, 
        "name": "Lucas dos Santos Abreu", 
        "username": "[email protected]" 
    } 
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X GET \
  --url http://localhost:8080/api/users/self \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

GET Listar Usuários

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
limitNúmero de registros por página, limitado a 50
offsetPonto para iniciar a listagem de registros
qfiltro 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.
Retorno:
{ 
    "result": [ 
        { 
            "id": 1, 
            "name": "Joãozinho" 
        }, 
        { 
            "id": 2, 
            "name": "Lucas dos Santos Abreu" 
        } 
    ], 
    "paging": { 
        "count": 2, 
        "total": 2, 
        "offset": 0 
    } 
}
Exemplo Chamada em cURL
curl -X GET \
  --url http://localhost:8080/api/users

GET Dados de um Usuário

http://localhost:8080/api/users/[:id]

Retorna as informações do usuári do ID passado.

Retorno:
{ 
    "result": { 
        "id": 11,
        "name": "Lucas dos Santos Abreu" 
    } 
}
Exemplo Chamada em cURL
curl -X GET \
  --url 'http://localhost:8080/api/users/[:id]'

PUT Modificar Usuário

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.

Retorno:
{ 
    "result": { 
        "id": 11, 
        "name": "Lucas dos Santos Abreu" 
    } 
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
BODY
nameLucas Abreu
Exemplo Chamada em cURL
curl -X PUT \
  --url 'http://localhost:8080/api/users/[:id]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
  --data name=Lucas%20Abreu

PUT Trocar senha de usuário

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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
BODY
password123456
newPassword654321
Exemplo Chamada em cURL
curl -X PUT \
  --url 'http://localhost:8080/api/users/[:id]/change-password' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
  --data 'password=123456&newPassword=654321'

DELETE Remover Usuário

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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X DELETE \
  --url 'http://localhost:8080/api/users/[:id]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

POST Criar Amizade

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.

Retorno:
{ 
    "result": { 
        "id": 8, 
        "name": "Joãozinho" 
    } 
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
BODY
id[:idFriend]
Exemplo Chamada em cURL
curl -X POST \
  --url 'http://localhost:8080/api/users/[:userId]/friends' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
  --data id=%5B%3AidFriend%5D

GET Lista Amizades do Usuário

http://localhost:8080/api/users/[:id]/friends

Permite listar as amizades do usuário da URL

Retorno:
{ 
    "result": 
    [ 
        { 
            "id": 8, 
            "name": "Joãozinho" 
        }
    ] 
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X GET \
  --url 'http://localhost:8080/api/users/[:id]/friends' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

DELETE Desfazer Amizade

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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X DELETE \
  --url 'http://localhost:8080/api/users/[:idUser]/friends/[:idFriend]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

POST Criar Nova Postagem

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.

Retorno:
{ 
    "result": { 
        "id": 9, 
        "userId": 11, 
        "datePublish": "2016-07-30 03:55:53", 
        "text": "something funny" 
    } 
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
BODY
textsomething funny
Exemplo Chamada em cURL
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'

GET Listar Postagem

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
limitNúmero de registros por página, limitado a 50
offsetPonto para iniciar a listagem de registros
qfiltro 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.
Retorno:
{
    "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 
    } 
}
Exemplo Chamada em cURL
curl -X GET \
  --url http://localhost:8080/api/posts

GET Listar Postagem Filtrando

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
limitNúmero de registros por página, limitado a 50
offsetPonto para iniciar a listagem de registros
qfiltro 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.
Retorno:
{ 
    "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 
    } 
}
Exemplo Chamada em cURL
curl -X GET \
  --url 'http://localhost:8080/api/posts?q=text%3Afunny'

GET Listar Postagens do Usuário

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
limitNúmero de registros por página, limitado a 50
offsetPonto para iniciar a listagem de registros
qfiltro 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.
Retorno:
{ 
    "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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X GET \
  --url 'http://localhost:8080/api/posts/user/[:id]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

GET Listar Feed

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
limitNúmero de registros por página, limitado a 50
offsetPonto para iniciar a listagem de registros
qfiltro 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.
Retorno:
{
    "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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X GET \
  --url http://localhost:8080/api/feed \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

GET Detalhar Postagem

http://localhost:8080/api/posts/[:id]

Retorna a data de publicação, Id do usuário, texto e Id da mesma.

Retorno:
{
    "result": {
        "id": 10,
        "userId": 11,
        "datePublish": "2016-07-30 03:57:33",
        "text": "something funny"
    }
}
HEADERS
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X GET \
  --url 'http://localhost:8080/api/posts/[:id]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2'

PUT Modificar Postagem

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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
BODY
textnot that funny
Exemplo Chamada em cURL
curl -X PUT \
  --url http://localhost:8080/api/posts/1 \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
  --data text=not%20that%20funny

DELETE Elimina Postagem

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
AuthorizationBasic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2
Exemplo Chamada em cURL
curl -X DELETE \
  --url 'http://localhost:8080/api/posts/[:id]' \
  --header 'authorization: Basic bHVjYXMucy5hYnJldUBnbWFpbC5jb206MTIzNDU2' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001'

Executando/Instalando

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

Instalação Apache

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>
Instalação Nginx

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 !

Tag summary

Content type

Image

Digest

Size

185.2 MB

Last updated

over 9 years ago

docker pull lucassabreu/social-media-api