API REST para gerenciamento de tarefas desenvolvida em Delphi 10.2.3.
O projeto expoe uma API HTTP para cadastro, consulta, atualizacao e exclusao de tarefas. A aplicacao usa Horse como servidor web, GBSwagger para documentacao e GBJSON para serializacao e desserializacao dos objetos.
A aplicacao esta organizada em camadas:
server.pas: bootstrap do servidor, middlewares globais e inicializacao da aplicacao.src/api/route: registro das rotas publicadas no Horse/GBSwagger.src/task/controller: camada HTTP, responsavel por receber request, validar entrada de rota/query/body e devolver response HTTP.src/task/service: camada de servico, responsavel por regras de negocio e validacoes de create, update, delete e leitura.src/task/repository: camada de persistencia, responsavel pelo SQL e mapeamento entre dataset e objetos.src/database: factories e abstracoes de conexao/query com FireDAC.src/config: configuracao de banco e Swagger.src/task/types: DTOs, entidades e tipos auxiliares do dominio.
Fluxo principal:
- O Horse recebe a requisicao.
- O controller interpreta parametros de rota, query string e body.
- O service aplica validacoes e regras de negocio.
- O repository executa o acesso ao banco.
- O controller devolve o objeto serializado na resposta HTTP.
- Delphi 10.2.3
Dependencias declaradas em boss.json:
github.com/hashload/horse^3.2.0github.com/hashload/horse-cors^1.0.7github.com/hashload/jhonson^1.2.1https://github.com/willder-root/gbjson^1.0.1https://github.com/willder-root/gbswagger^1.0.1
Dependencias de runtime e plataforma:
- FireDAC
- Firebird
fbclient.dllconfigurada viaconfig.ini
O projeto le um arquivo config.ini no mesmo diretorio do executavel.
Exemplo:
[DB]
HOST=localhost
PATH=C:\dados\APITASKLIST.FDB
USER=SYSDBA
PASS=masterkey
VENDORLIB=C:\Program Files (x86)\Firebird\Firebird_3_0\fbclient.dllChaves esperadas:
HOSTPATHUSERPASSVENDORLIB
A API sobe na porta 4040.
Configuracoes aplicadas na inicializacao:
- CORS habilitado
- middleware JSON via Jhonson
- middleware Swagger via GBSwagger
- formatacao de data do GBJSON em
dd/mm/yyyy hh:mm:ss - locale de data do GBJSON em
pt-BR
http://localhost:4040/v1
O BasePath configurado no Swagger e v1.
GET /v1/Task/{id}Resposta:
200 OKquando encontrar a tarefa404 Not Foundquando a tarefa nao existir400 Bad Requestquando oidfor invalido
GET /v1/Task/ListQuery params suportados:
Title: filtro por tituloDateStart: filtro por data, obrigatorio no formatodd/mm/yyyyStatus: filtro por status, com valoresPENDINGouFINISH
Exemplo:
GET /v1/Task/List?Title=Delphi&DateStart=04/04/2026&Status=PENDINGResposta:
200 OK400 Bad Requestpara data invalida ou status invalido
Observacao:
- o filtro
DateStartpesquisa o intervalo do dia entre00:01e23:59no repository
POST /v1/Task
Content-Type: application/jsonExemplo de body:
{
"title": "Nova tarefa",
"startedAt": "04/04/2026 08:00:00",
"finishedAt": "04/04/2026 18:00:00",
"status": "PENDING"
}Regras atuais de validacao:
TitleobrigatorioStartedAtobrigatorioStatusobrigatorio
Resposta:
201 Created400 Bad Requestpara payload invalido
PUT /v1/Task/{id}
Content-Type: application/jsonExemplo de body:
{
"title": "Tarefa atualizada",
"startedAt": "04/04/2026 08:00:00",
"finishedAt": "04/04/2026 18:00:00",
"status": "FINISH"
}Regras atuais de validacao:
TitleobrigatorioStartedAtobrigatorioFinishedAtobrigatorioStatusobrigatorio
Resposta:
200 OK400 Bad Requestparaidou payload invalido404 Not Foundquando a tarefa nao existir
DELETE /v1/Task/{id}Resposta:
200 OK400 Bad Requestquando oidfor invalido404 Not Foundquando a tarefa nao existir
Os status disponiveis atualmente sao:
PENDINGFINISH
No contrato atual:
DateStartda rotaListdeve ser enviado emdd/mm/yyyy- campos de data/hora documentados no Swagger usam
dd/mm/yyyy hh:mm:ss
O projeto usa GBSwagger para publicar a documentacao da API.
O BasePath configurado e v1, e as rotas sao registradas a partir do TTaskController.