Skip to content

Instantly share code, notes, and snippets.

@Diegiwg
Created May 6, 2023 22:25
Show Gist options
  • Save Diegiwg/418b9da74cab03bcc07c92011e22beb5 to your computer and use it in GitHub Desktop.
Save Diegiwg/418b9da74cab03bcc07c92011e22beb5 to your computer and use it in GitHub Desktop.
Padrões de Rotas - Vacuum

Padrões de Rotas - Vacuum

Todas as rotas ficam dentro da pasta raiz api, dentro da pasta que representa sua versão, atualmente v1.

Rotas para Conjunto de Recursos

Quando quisermos acessar um conjunto de recursos, a rota estará escrita no plural.

A exemplo com alguns dos recursos que temos no projeto:

  • api/v1/profiles
  • api/v1/topics

Rotas para Um Recurso

Quando quisermos acessar um recurso especifico, usaremos a notação de [slug], para capturar o identificador único do recurso, que normalmente será o uuid.

A exemplo com alguns dos recursos que temos no projeto:

  • api/v1/profiles/[id]
  • api/v1/topics/[id]

Rotas para Ações (actions)

Resolvemos adotar o padrão n-n para acessar as ações, ou seja, não teremos um arquivo index.ts que irá receber e tratar todas as requisições, teremos um arquivo para cada ação permitida.

A exemplo com alguns dos recursos que temos no projeto:

  • api/v1/auth/login
  • api/v1/profiles/create
  • api/v1/profiles/[id]/get
  • api/v1/profiles/[id]/topics/get
  • api/v1/topics/[id]/delete

Como definir uma rota

Rota sem [slug]

  • api/v1/auth/login
import { NextApiRequest, NextApiResponse } from 'next'

export default async function handler(
  _req: NextApiRequest,
  res: NextApiResponse
) {
    ...LOGICA...
}

Rota com [slug]

  • api/v1/profiles/[id]/get
import { UUID } from 'crypto'
import { NextApiRequest, NextApiResponse } from 'next'

export default async function handler(
  _req: NextApiRequest,
  res: NextApiResponse
) {

    // Aqui captura o valor do slug, que tem o alias `id`
    const { id } = req.query as { id: UUID }

    ...LOGICA...
}

Diretório API

API
v1
auth
login.ts
categories
create.ts
[uuid]
get.ts
profiles
create.ts
[uuid]
topics
get.ts
tags
create.ts
[uuid]
create.ts
topics
create.ts
[uuid]
edit.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment