Criação de uma API REST de quadro de avisos mínimo viável para fins educacionais.
Obtendo listas de todas as tags, postagens e usuários
Pesquisar em listas
Cadastro de usuário
Um usuário registrado pode:
Adicionar novas postagens
Comente em postagens existentes
Exclua e edite suas postagens e comentários
PHP 8.1+
Laravel10
Compositor
MySQL
POST
/api/v1/auth/register
RegistroNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
nome | obrigatório | corda | Nome |
apelido | obrigatório | corda | Identificador legível por humanos |
obrigatório | corda | Endereço de email | |
senha | obrigatório | corda | Senha |
senha_confirmada | obrigatório | corda | Confirmação de senha |
201
CREATED
{ "access_token", "token_type": "Bearer" }
POST
/api/v1/auth/login
LoginNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
obrigatório | corda | Endereço de email | |
senha | obrigatório | corda | Senha |
200
OK
{ "access_token", "token_type":"Bearer" }
POST
/api/v1/auth/logout
SairChave | Valor |
---|---|
Autorização | Portador {token} |
204
NO CONTENT
GET
/api/v1/profile
Obtenha perfil de usuário autenticadoChave | Valor |
---|---|
Autorização | Portador {token} |
200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/profile/posts
Obtenha o perfil e as postagens de um usuário autenticadoChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de postagens por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug", }, ... ], "comments_count" } ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/profile/comments
Obtenha o perfil e os comentários de um usuário autenticadoChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de comentários por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users
Obtenha todos os usuáriosNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
q | opcional | corda | Consulta de pesquisa |
por_página | opcional | interno | Número de usuários por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/users/{nickname}
Obter usuário200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/users/{nickname}/posts
Obtenha o usuário e suas postagensNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de postagens por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users/{nickname}/comments
Obtenha o usuário e seus comentáriosNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de comentários por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/tags
Obtenha todas as tagsNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
q | opcional | corda | Consulta de pesquisa |
200
OK
{ "data": [ { "tag_id", "name", "slug", "post_count" }, ... ] }
GET
/api/v1/tags/{slug}
Obtenha uma tag e suas postagensNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de postagens por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname" }, ], "links": {...}, "meta": {...}, "tag": { "tag_id", "name", "slug" } }
GET
/api/v1/posts
Obter todas as postagensNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
q | opcional | corda | Consulta de pesquisa |
por_página | opcional | interno | Número de postagens por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "post_id, "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/posts/{id}
Obtenha uma postagem e seus comentáriosNome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
por_página | opcional | interno | Número de comentários por página |
página | opcional | interno | Número da página |
200
OK
{ "data": [ { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "post": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] } }
POST
/api/v1/posts
Adicionar nova postagemChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
título | opcional | corda | Título |
preço | opcional | flutuador | Preço |
descrição | opcional | corda | Descrição |
etiquetas[id] | opcional | matriz[int] | Matriz de IDs de tags |
201
CREATED
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
PUT
/api/v1/posts/{id}
Editar postagemChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
título | opcional | corda | Título |
preço | opcional | flutuador | Preço |
descrição | opcional | corda | Descrição |
etiquetas[id] | opcional | matriz[int] | Matriz de IDs de tags |
200
OK
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
DELETE
/api/v1/posts/{id}
Excluir uma postagemChave | Valor |
---|---|
Autorização | Portador {token} |
204
NO CONTENT
POST
/api/v1/posts/{id}/comments
Adicionar um novo comentário a uma postagemChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
corpo | obrigatório | corda | Texto do comentário |
201
CREATED
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", }, }
PUT
/api/v1/comments/{id}
Editar comentárioChave | Valor |
---|---|
Autorização | Portador {token} |
Nome | Tipo | Tipo de dados | Descrição |
---|---|---|---|
corpo | obrigatório | corda | Texto do comentário |
200
OK
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", } }
DELETE
/api/v1/comments/{id}
Excluir um comentárioChave | Valor |
---|---|
Autorização | Portador {token} |
204
NO CONTENT
Clone este repositório e vá para a pasta do seu projeto:
clone git https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Instale dependências:
instalação do compositor
Inicie o MySQL, altere os parâmetros de conexão ao banco de dados no arquivo .env.example e execute:
copiar .env.exemplo .env
Execute o comando para executar as migrações:
php artesão migrar
Ou se você quiser preencher o banco de dados com dados fictícios:
php artesão migrar --seed
Inicie o servidor web:
php artesão servir
Abra no seu navegador, por exemplo, http://localhost:8000/api/v1/posts
Crie um novo banco de dados para teste, altere os parâmetros para conectar-se a ele no arquivo .env.testing e execute:
teste de artesão php
Clone este repositório e vá para a pasta do seu projeto:
clone git https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Instale dependências:
janela de encaixe execute --rm -u "$(id -u):$(id -g)" -v "$(senha):/var/www/html" -w /var/www/html laravelsail/php82-composer:mais recente instalação do compositor --ignore-platform-reqs
Crie um arquivo .env:
cp.env.docker.examlpe.env
Crie um alias de shell e execute navegar:
alias vela='[ -f vela ] && sh vela || sh fornecedor/bin/sail'sail up -d
Execute o comando para executar as migrações:
artesão de vela migrar
Ou se você quiser preencher o banco de dados com dados fictícios:
artesão de vela migrar --seed
Abra em um navegador, por exemplo, http://localhost/api/v1/posts
Para interromper o uso de contêineres:
parada de vela
Configure o arquivo .env.testing:
cp.env.docker.testing.env.testing
Execute os testes:
teste de artesão de vela