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/profilesapi/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/loginapi/v1/profiles/createapi/v1/profiles/[id]/getapi/v1/profiles/[id]/topics/getapi/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 |