{"id":15096047,"url":"https://github.com/raelnogpires/libraryapp","last_synced_at":"2026-01-30T21:38:36.359Z","repository":{"id":40495315,"uuid":"487587886","full_name":"raelnogpires/libraryapp","owner":"raelnogpires","description":"API REST written in Go that simulates the management of a library. ","archived":false,"fork":false,"pushed_at":"2022-05-30T23:27:40.000Z","size":30635,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-17T19:06:47.950Z","etag":null,"topics":["docker","gin-gonic","golang","gorm-orm","jwt","mysql"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raelnogpires.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-01T16:36:01.000Z","updated_at":"2022-08-10T20:49:15.000Z","dependencies_parsed_at":"2022-08-09T22:12:31.613Z","dependency_job_id":null,"html_url":"https://github.com/raelnogpires/libraryapp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raelnogpires/libraryapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raelnogpires%2Flibraryapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raelnogpires%2Flibraryapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raelnogpires%2Flibraryapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raelnogpires%2Flibraryapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raelnogpires","download_url":"https://codeload.github.com/raelnogpires/libraryapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raelnogpires%2Flibraryapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28919769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T20:25:28.696Z","status":"ssl_error","status_checked_at":"2026-01-30T20:25:13.426Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","gin-gonic","golang","gorm-orm","jwt","mysql"],"created_at":"2024-09-25T15:45:13.196Z","updated_at":"2026-01-30T21:38:36.342Z","avatar_url":"https://github.com/raelnogpires.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LibraryAPI\n\nLibraryAPI é uma REST API que simula o gerenciamento de uma biblioteca. É possível criar, editar, visualizar e deletar livros, autores e categorias. Porém, é necessário estar cadastrado na aplicação.\n\n## Tecnologias utilizadas\nEssa API foi desenvolvida utilizando a linguagem [Go](https://go.dev/), em conjunto com o Object-Relational Mapper (ORM) [GORM](https://gorm.io/) e o banco de dados relacional [MySQL](https://www.mysql.com/).  \nA autenticação nas rotas é feita com JSON Web Token [(JWT)](https://jwt.io/), concedido no login.  \nAs senhas dos usuários são criptografadas antes de serem armazenadas no banco de dados.\n\n## Preparando o ambiente\nPara executar essa aplicação, será necessário que o [Docker](https://docs.docker.com/engine/install/) e o [Docker Compose](https://docs.docker.com/compose/install/) estejam instalados em sua máquina.  \nAbra o terminal e siga os seguintes passos:\n\n1. Clone o repositório da aplicação:\n```sh\n git clone git@github.com:raelnogpires/libraryapp.git\n```\n2. Entre no repositório:\n```sh\n cd libraryapp\n```\n3. Entre no diretório `src/` e copie o arquivo `.env.example` para `.env` :\n```sh\n cd src \u0026\u0026 cp .env.example .env\n```\n\n## Executando a aplicação\nCom o terminal aberto na raiz da aplicação, execute:\n```sh\n docker compose up\n```\nAguarde o seguinte log aparecer:\n```sh\n library_api | db running\n library_api | server running at port: 5000\n```\nPara encerrar a aplicação utilize `Ctrl + C` .\n\n## Documentação\n\n### Cadastro de um novo usuário\nCadastra uma nova pessoa usuária.  \n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n POST http://localhost:5000/api/v1/register\n```\n\n#### Parâmetros\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| username      | string   | Nome/apelido de usuário. **Obrigatório**.             |\n| email         | string   | Email no formato \"user@library.com\". **Obrigatório**. |\n| password      | string   | Senha do usuário. **Obrigatório**.                    |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 201        | user registered with success       |\n| 400        | invalid request body               |\n| 400        | email already registered           |\n\n#### Exemplo\nRequisição:\n```json\n {\n   \"username\": \"reader\",\n   \"email\": \"ilovebooks@lispector.com\",\n   \"password\": \"1d5as15d\"\n }\n```\n\nResposta:\n```json\n {\n   \"message\": \"user registered with success\",\n }\n```\n\n\u003c/details\u003e\n\n### Login\nRealiza o login com email e senha de uma pessoa usuária já cadastrada.  \nCorpo da resposta contém um objeto JSON com o token de autenticação gerado e o `id` do usuário.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n POST http://localhost:5000/api/v1/login\n```\n\n#### Parâmetros\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| email         | string   | Email da pessoa usuária. **Obrigatório**.             |\n| password      | string   | Senha da pessoa usuária. **Obrigatório**.             |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | token generated with success       |\n| 400        | invalid credentials                |\n| 404        | user not found                     |\n\n#### Exemplo\nRequisição:\n```json\n {\n   \"email\": \"ilovebooks@lispector.com\",\n   \"password\": \"1d5as15d\"\n }\n```\n\nResposta:\n```json\n {\n   \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjIsImV4cCI6MTY1MzY5MDQ2MCwiaWF0IjoxNjUzNjY4ODYwLCJpc3MiOiJsaWJyYXJ5In0.kp7TQZmRHz-5ENJMa9KZ0mRVg35Xd8sm08WKmX_MFXg\",\n   \"user_id\": 1\n }\n```\n\n\u003c/details\u003e\n\n### Deletar seu usuário\nDeleta o usuário que está logado.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n DELETE http://localhost:5000/api/v1/user/me\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\nNenhum.\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 204        | user deleted with success          |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | user not found                     |\n\n#### Exemplo\nRequisição:  \n![deleteMe](./readme_utils/deleteMe.png)\n\n\u003c/details\u003e\n\n### Buscar todos os livros\nBusca todos os livros cadastrados.  \nCorpo da resposta contém um array JSON com os livros e suas informações.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/books\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\nNenhum.\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do livro.                                          |\n| name          | string   | Nome do livro.                                        |\n| description   | string   | Sinopse do livro.                                     |\n| category_id   | int      | ID da categoria que o livro pertence.                 |\n| category_name | string   | Nome da categoria que o livro pertence.               |\n| author_id     | int      | ID da pessoa autora.                                  |\n| author_name   | string   | Nome da pessoa autora.                                |\n| img_url       | string   | URL da imagem do livro.                               |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | books returned with success        |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:  \n![getAllBooks](./readme_utils/getAllBooks.png)\n\nResposta:\n```json\n [\n   {\n     \"id\": 1,\n     \"name\": \"Sentimento do mundo\",\n     \"description\": \"O Drummond de Sentimento do mundo oscila entre diversos polos: cidade x interior, atualidade x memórias, eu x mundo. Perfeita depuração dos livros anteriores, este é um verdadeiro marco.\",\n     \"category_id\": 6,\n     \"category_name\": \"Poesia\",\n     \"author_id\": 2,\n     \"author_name\": \"Carlos Drummond de Andrade\",\n     \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/41Q6T14Y0EL._SX324_BO1,204,203,200_.jpg\"\n   },\n   {\n     \"id\": 2,\n     \"name\": \"Crime e Castigo\",\n     \"description\": \"Crime e Castigo é a obra mais célebre de Fyodor Dostoevsky. Neste livro, Raskólnikov, um jovem estudante, pobre e desesperado, perambula pelas ruas de São Petersburgo até cometer um crime que tentará justificar por uma teoria: grandes homens, como César ou Napoleão, foram assassinos absolvidos pela História.\",\n     \"category_id\": 5,\n     \"category_name\": \"Literatura Russa\",\n     \"author_id\": 4,\n     \"author_name\": \"Fyodor Dostoevsky\",\n     \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/517DdyXpc5L._SX348_BO1,204,203,200_.jpg\"\n   },\n ]\n```\n\n\u003c/details\u003e\n\n### Buscar livro\nBusca um livro especificado pelo seu ID.  \nCorpo da resposta contém um objeto JSON as com informações do livro.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/books/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**              |\n|:----------|:---------|:---------------------------|\n| id        | int      | ID do livro a ser buscado. |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do livro.                                          |\n| name          | string   | Nome do livro.                                        |\n| description   | string   | Sinopse do livro.                                     |\n| category_id   | int      | ID da categoria que o livro pertence.                 |\n| category_name | string   | Nome da categoria que o livro pertence.               |\n| author_id     | int      | ID da pessoa autora.                                  |\n| author_name   | string   | Nome da pessoa autora.                                |\n| img_url       | string   | URL da imagem do livro.                               |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | book returned with success         |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | book not found                     |\n\n#### Exemplo\n\nRequisição:  \n![getBookById](./readme_utils/getBookById.png)\n\nResposta:  \n```json\n {\n   \"id\": 2,\n   \"name\": \"Crime e Castigo\",\n   \"description\": \"Crime e Castigo é a obra mais célebre de Fyodor Dostoevsky. Neste livro, Raskólnikov, um jovem estudante, pobre e desesperado, perambula pelas ruas de São Petersburgo até cometer um crime que tentará justificar por uma teoria: grandes homens, como César ou Napoleão, foram assassinos absolvidos pela História.\",\n   \"category_id\": 5,\n   \"category_name\": \"Literatura Russa\",\n   \"author_id\": 4,\n   \"author_name\": \"Fyodor Dostoevsky\",\n   \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/517DdyXpc5L._SX348_BO1,204,203,200_.jpg\"\n }\n```\n\n\u003c/details\u003e\n\n### Criar um livro\nCria um novo livro.  \nCorpo da resposta contém um objeto JSON com as informações do livro criado.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n POST http://localhost:5000/api/v1/books\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| name          | string   | Nome do livro. **Obrigatório**                        |\n| description   | string   | Sinopse do livro. **Obrigatório**                     |\n| category_id   | int      | ID da categoria que o livro pertence. **Obrigatório** |\n| author_id     | int      | ID da pessoa autora. **Obrigatório**                  |\n| img_url       | string   | URL da imagem do livro. **Obrigatório**               |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do livro.                                          |\n| name          | string   | Nome do livro.                                        |\n| description   | string   | Sinopse do livro.                                     |\n| category_id   | int      | ID da categoria que o livro pertence.                 |\n| author_id     | int      | ID da pessoa autora.                                  |\n| img_url       | string   | URL da imagem do livro.                               |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 201        | book created with success          |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:\n```json\n {\n   \"name\": \"O idiota\",\n   \"description\": \"Publicado originalmente em 1868, este é um desses livros em que o leitor reconhece de imediato a marca do gênio. Nele, o autor russo constrói um dos personagens mais impressionantes de toda a literatura mundial ― o humanista e epilético príncipe Míchkin, mescla de Cristo e Dom Quixote, cuja compaixão sem limites vai se chocar com o desregramento mundano de Rogójin e a beleza enlouquecedora de Nastácia Filíppovna.\",\n   \"category_id\": 5,\n   \"author_id\": 4,\n   \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/51EuSosoqJL._SX346_BO1,204,203,200_.jpg\"\n }\n```\n\nResposta:\n```json\n {\n   \"id\": 3,\n   \"name\": \"O idiota\",\n   \"description\": \"Publicado originalmente em 1868, este é um desses livros em que o leitor reconhece de imediato a marca do gênio. Nele, o autor russo constrói um dos personagens mais impressionantes de toda a literatura mundial ― o humanista e epilético príncipe Míchkin, mescla de Cristo e Dom Quixote, cuja compaixão sem limites vai se chocar com o desregramento mundano de Rogójin e a beleza enlouquecedora de Nastácia Filíppovna.\",\n   \"category_id\": 5,\n   \"author_id\": 4,\n   \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/51EuSosoqJL._SX346_BO1,204,203,200_.jpg\"\n }\n```\n\n\u003c/details\u003e\n\n### Editar um livro\nEdita um livro especificado pelo seu ID.  \nCorpo da resposta contém um objeto JSON com as informações do livro editado.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n PUT http://localhost:5000/api/v1/books/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**              |\n|:----------|:---------|:---------------------------|\n| id        | int      | ID do livro a ser editado. |\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| name          | string   | Nome do livro. **Obrigatório**                        |\n| description   | string   | Sinopse do livro. **Obrigatório**                     |\n| category_id   | int      | ID da categoria que o livro pertence. **Obrigatório** |\n| author_id     | int      | ID da pessoa autora. **Obrigatório**                  |\n| img_url       | string   | URL da imagem do livro. **Obrigatório**               |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do livro.                                          |\n| name          | string   | Nome do livro.                                        |\n| description   | string   | Sinopse do livro.                                     |\n| category_id   | int      | ID da categoria que o livro pertence.                 |\n| author_id     | int      | ID da pessoa autora.                                  |\n| img_url       | string   | URL da imagem do livro.                               |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | book edited with success           |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\nRequisição:  \n`http://localhost:5000/api/v1/books/3`  \n```json\n {\n   \"name\": \"The idiot\",\n   \"description\": \"A book written by Fyodor Dostoevsky.\",\n   \"category_id\": 5,\n   \"author_id\": 4,\n   \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/51EuSosoqJL._SX346_BO1,204,203,200_.jpg\"\n }\n```\n\nReposta:\n```json\n {\n   \"id\": 3,\n   \"name\": \"The idiot\",\n   \"description\": \"A book written by Fyodor Dostoevsky.\",\n   \"category_id\": 5,\n   \"author_id\": 4,\n   \"img_url\": \"https://images-na.ssl-images-amazon.com/images/I/51EuSosoqJL._SX346_BO1,204,203,200_.jpg\"\n }\n```\n\n\u003c/details\u003e\n\n### Deletar um livro\nDeleta um livro especificado pelo seu ID.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n DELETE http://localhost:5000/api/v1/books/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**               |\n|:----------|:---------|:----------------------------|\n| id        | int      | ID do livro a ser deletado. |\n\n#### Campos da resposta\nNenhum.\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 204        | book deleted with success          |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | book not found                     |\n\n\u003c/details\u003e\n\n### Buscar todos os autores\nBusca todos os autores cadastrados.  \nCorpo da resposta contém um array JSON com os autores.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/authors\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\nNenhum.\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do autor.                                          |\n| name          | string   | Nome do autor.                                        |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | authors returned with success      |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:  \n![getAllAuthors](./readme_utils/getAllAuthors.png)\n\nResposta:  \n```json\n [\n   {\n     \"id\": 1,\n     \"name\": \"Clarice Lispector\",\n   },\n   {\n     \"id\": 2,\n     \"name\": \"Carlos Drummond de Andrade\",\n   }\n ]\n```\n\n\u003c/details\u003e\n\n### Buscar autor\nBusca um autor especificado pelo seu ID.  \nCorpo da resposta contém um objeto JSON com as informações do autor.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/authors/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**               |\n|:----------|:---------|:----------------------------|\n| id        | int      | ID do autor a ser buscado.  |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do autor.                                          |\n| name          | string   | Nome do autor.                                        |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | author returned with success       |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | author not found                   |\n\n#### Exemplo\nRequisição:  \n![getAuthorById](./readme_utils/getAuthorById.png)\n\nResposta:\n```json\n {\n   \"id\": 2,\n   \"name\": \"Carlos Drummond de Andrade\"\n }\n```\n\n\u003c/details\u003e\n\n### Criar um autor\nCria um novo autor.  \nCorpo da resposta contém um objeto JSON com as informações do autor criado.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n POST http://localhost:5000/api/v1/authors\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| name          | string   | Nome do autor. **Obrigatório**                        |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do autor.                                          |\n| name          | string   | Nome do autor.                                        |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 201        | author created with success        |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:\n```json\n {\n   \"name\": \"J. R. R. Tolkien\"\n }\n```\n\nResposta:\n```json\n {\n   \"id\": 3,\n   \"name\": \"J. R. R. Tolkien\"\n }\n```\n\n\u003c/details\u003e\n\n### Editar um autor\nEdita um autor especificado pelo seu ID.  \nCorpo da resposta contém um objeto JSON com as informações do autor editado.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n PUT http://localhost:5000/api/v1/authors/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**              |\n|:----------|:---------|:---------------------------|\n| id        | int      | ID do autor a ser editado. |\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| name          | string   | Nome do autor. **Obrigatório**                        |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID do autor.                                          |\n| name          | string   | Nome do autor.                                        |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | author edited with success         |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | author not found                   |\n\n#### Exemplo\nRequisição:  \n`http://localhost:5000/api/v1/authors/3`  \n```json\n {\n   \"name\": \"George R. R. Martin\"\n }\n```\n\nResposta:\n```json\n {\n   \"id\": 3,\n   \"name\": \"George R. R. Martin\"\n }\n```\n\n\u003c/details\u003e\n\n### Deletar um autor\nDeleta um autor especificado pelo seu ID.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n DELETE http://localhost:5000/api/v1/authors/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**               |\n|:----------|:---------|:----------------------------|\n| id        | int      | ID do autor a ser deletado. |\n\n#### Campos da resposta\nNenhum.\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 204        | author deleted with success        |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | author not found                   |\n\n\u003c/details\u003e\n\n### Buscar todas as categorias\nBusca todas as categorias cadastradas.  \nCorpo da resposta contém um array JSON com as categorias.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/categories\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\nNenhum.\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID da categoria.                                      |\n| name          | string   | Nome da categoria.                                    |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | categories returned with success   |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:\n![getAllCategories](./readme_utils/getAllCategories.png)\n\nResposta:\n```json\n [\n   {\n     \"id\": 1,\n     \"name\": \"Poesia\"\n   },\n   {\n     \"id\": 2,\n     \"name\": \"Ficção Literária\"\n   }\n ]\n```\n\n\u003c/details\u003e\n\n### Buscar categoria\nBusca um autor especificado pelo seu ID.  \nCorpo da resposta contém um objeto JSON com as informações da categoria.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n GET http://localhost:5000/api/v1/categories/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**                   |\n|:----------|:---------|:--------------------------------|\n| id        | int      | ID da categoria a ser buscada.  |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID da categoria.                                      |\n| name          | string   | Nome da categoria.                                    |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | category returned with success     |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | category not found                 |\n\n#### Exemplo\nRequisição:  \n![getCategoryById](./readme_utils/getCategoryById.png)\n\nResposta:\n```json\n {\n   \"id\": 2,\n   \"name\": \"Ficção Literária\"\n }\n```\n\n\u003c/details\u003e\n\n### Criar uma categoria\nCria uma nova categoria.  \nCorpo da resposta contém um objeto JSON com as informações da categoria criada.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n POST http://localhost:5000/api/v1/categories\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Body\n| **Campo** | **Tipo** | **Descrição**                       |\n|:----------|:---------|:------------------------------------|\n| name      | string   | Nome da categoria. **Obrigatório**  |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID da categoria.                                      |\n| name          | string   | Nome da categoria.                                    |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 201        | category created with success      |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n\n#### Exemplo\nRequisição:\n```json\n {\n   \"name\": \"Literatura Russa\"\n }\n```\n\nResposta:\n```json\n {\n   \"id\": 3,\n   \"name\": \"Literatura Russa\"\n }\n```\n\n\u003c/details\u003e\n\n### Editar uma categoria\nEdita uma categoria especificada pelo seu ID.  \nCorpo da resposta contém um objeto JSON com as informações da categoria editada.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n PUT http://localhost:5000/api/v1/categories/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**                  |\n|:----------|:---------|:-------------------------------|\n| id        | int      | ID da categoria a ser editada. |\n\n##### Body\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| name          | string   | Nome do categoria. **Obrigatório**                    |\n\n#### Campos da resposta\n| **Parâmetro** | **Tipo** | **Descrição**                                         |\n|:--------------|:---------|:------------------------------------------------------|\n| id            | int      | ID da categoria.                                      |\n| name          | string   | Nome da categoria.                                    |\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 200        | category edited with success       |\n| 400        | invalid request body               |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | category not found                 |\n\n#### Exemplo\nRequisição:  \n`http://localhost:5000/api/v1/categories/2`  \n```json\n {\n   \"name\": \"Romance\"\n }\n```\n\nResposta:\n```json\n {\n   \"id\": 2,\n   \"name\": \"Romance\"\n }\n```\n\n\u003c/details\u003e\n\n### Deletar uma categoria\nDeleta uma categoria especificada pelo seu ID.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDetalhes\u003c/strong\u003e\u003c/summary\u003e\n\n#### URL\n```sh\n DELETE http://localhost:5000/api/v1/categories/{id}\n```\n\n#### Autorização\nRequer token de autenticação no campo `Token` do `Bearer Token` .\n\n#### Parâmetros\n\n##### Path\n| **Campo** | **Tipo** | **Descrição**                   |\n|:----------|:---------|:--------------------------------|\n| id        | int      | ID da categoria a ser deletada. |\n\n#### Campos da resposta\nNenhum.\n\n#### Códigos de status da resposta\n| **Código** | **Descrição**                      |\n|:-----------|:-----------------------------------|\n| 204        | category deleted with success      |\n| 401        | invalid token                      |\n| 404        | token not found                    |\n| 404        | category not found                 |\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraelnogpires%2Flibraryapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraelnogpires%2Flibraryapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraelnogpires%2Flibraryapp/lists"}