Skip to content

Posts

O módulo de posts é o coração do seu blog. Ele permite que você crie, gerencie e publique artigos ricos em conteúdo, com suporte a SEO, categorias, tags e imagens de capa.

Cada post passa por um ciclo de vida que inclui rascunhos, agendamento de publicação e arquivamento, garantindo controle total sobre o que seu público vê.


Estrutura de Dados Principal

Um post contém as seguintes informações principais:

CampoTipoDescrição
titleStringTítulo principal do artigo (máx. 150 caracteres).
slugStringURL amigável (ex: meu-artigo-incrivel).
excerptStringResumo curto do artigo (máx. 500 caracteres).
contentStringConteúdo completo (suporta HTML/Markdown).
readingTimeIntegerTempo de leitura estimado em segundos (calculado automaticamente).
statusEnumdraft, published ou archived.
isFeaturedBooleanIndica se o post está em destaque.
viewCountIntegerContador de visualizações.

Endpoints Públicos

Estes endpoints são voltados para o frontend do blog e não exigem autenticação administrativa. Eles retornam apenas posts com o status published.

Listar Posts Publicados

Retorna uma lista paginada de todos os posts publicados.

http
GET /v1/blog/posts/public/published

Parâmetros de Query

NomeTipoObrigatórioDescrição
pagenumberNãoO número da página (padrão: 1).
perPagenumberNãoItens por página (padrão: 20).
searchstringNãoBusca por termo no título.
isFeaturedbooleanNãoFiltra apenas posts em destaque.
categoriesnumber[]NãoFiltra por IDs de categorias.
tagsnumber[]NãoFiltra por IDs de tags.

Exemplo de Requisição

bash
curl -X GET "https://api.us.basis.tavares.in/v1/blog/posts/public/published?page=1&perPage=10" \
  -H "Accept: application/json"

Respostas

200 OK

Retorna um objeto de paginação contendo a lista de posts e metadados.

json
{
  "meta": {
    "total": 50,
    "per_page": 10,
    "current_page": 1,
    "last_page": 5,
    "first_page": 1
  },
  "data": [
    {
      "id": 16,
      "title": "Novidades da Versão 2.0",
      "slug": "novidades-versao-2-0",
      "excerpt": "Um resumo sobre as novidades...",
      "publishedAt": "2026-03-25T17:17:00.000+00:00",
      "blogUser": {
        "firstName": "Gerson",
        "lastName": "Tavares"
      },
      "blogImage": {
        "uri": "https://cdn.exemplo.com/imagem.jpg"
      }
    }
  ]
}

Obter Post por Slug

Recupera os detalhes completos de um post através do seu slug único.

http
GET /v1/blog/posts/public/slug/:slug

Parâmetros de Rota

NomeTipoObrigatórioDescrição
slugstringSimO slug único do post (ex: novidades-versao-2-0).

Exemplo de Requisição

javascript
fetch('https://api.us.basis.tavares.in/v1/blog/posts/public/slug/novidades-versao-2-0')
  .then(response => response.json())
  .then(data => console.log(data));

Respostas

404 Not Found

Ocorre quando o post não existe ou não está publicado.


Endpoints Administrativos

Endpoints protegidos para gerenciamento de conteúdo. Requerem autenticação de usuário do blog.

Listar Todos os Posts

Lista todos os posts, incluindo rascunhos e arquivados.

http
GET /v1/blog/posts

Parâmetros de Query

Além dos filtros de paginação e busca (page, perPage, search, isFeatured), permite filtrar por status, categorias e tags:

NomeTipoDescrição
statusenumFiltra por published ou draft.
categoriesnumber[]Filtra por IDs de categorias.
tagsnumber[]Filtra por IDs de tags.

Criar Novo Post

Cria um novo post e vincula categorias e tags.

http
POST /v1/blog/posts

Payload (Body)

AtributoTipoObrigatórioDescrição
post.titlestringSimTítulo (máx. 150 caracteres).
post.slugstringSimSlug único.
post.contentstringSimConteúdo principal (HTML/Markdown).
post.blogImageIdnumberSimID da imagem de capa.
post.statusenumNãodraft ou published.
tagsarrayNãoIDs das tags (ex: [1, 2]).
categoriesarrayNãoIDs das categorias (ex: [5]).

Exemplo de Requisição

bash
curl -X POST "https://api.us.basis.tavares.in/v1/blog/posts" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "post": {
      "title": "Novo Artigo",
      "slug": "novo-artigo",
      "content": "<p>Conteúdo aqui...</p>",
      "blogImageId": 5,
      "isFeatured": true
    },
    "tags": [1, 2],
    "categories": [5]
  }'

Respostas

201 Created

Retorna o ID do post criado.

json
{
  "id": 18
}

400 Validation Error

Erro de validação nos campos enviados.

json
{
  "errors": [
    {
      "message": "Slug já cadastrado",
      "rule": "database.unique",
      "field": "post.slug"
    }
  ]
}

Atualizar Post

Atualiza um post existente. O tempo de leitura é recalculado automaticamente.

http
PUT /v1/blog/posts/:id

Exemplo de Requisição

bash
curl -X PUT "https://api.us.basis.tavares.in/v1/blog/posts/18" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "post": {
      "title": "Título Atualizado"
    }
  }'

Remover Post

Exclui um post permanentemente (Soft Delete).

http
DELETE /v1/blog/posts/:id

204 No Content

Remoção concluída com sucesso.