Todas as rotas ficam dentro da pasta raiz api
, dentro da pasta que representa sua versão, atualmente v1
.
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
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]
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
api/v1/auth/login
import { NextApiRequest, NextApiResponse } from 'next'
export default async function handler(
_req: NextApiRequest,
res: NextApiResponse
) {
...LOGICA...
}
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...
}
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 |