frappe-api-design
Standardizes the design and implementation of Frappe APIs, ensuring secure, consistent, and performant endpoints.
Install
mkdir -p .claude/skills/frappe-api-design && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17419" && unzip -o skill.zip -d .claude/skills/frappe-api-design && rm skill.zipInstalls to .claude/skills/frappe-api-design
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Define e implementa APIs no Frappe com métodos whitelisted (RPC) e endpoints REST consistentes. Use quando houver criação, ajuste ou revisão de contratos de API, autenticação/autorização, paginação, filtros, padronização de respostas e tratamento de erros.Key capabilities
- →Define payload, required/optional fields, and return format for API contracts
- →Map error scenarios including permission, validation, not found, and conflict
- →Determine if an API is authenticated or public
- →Validate role/profile and backend permissions for data mutations
- →Implement RPC methods using `@frappe.whitelist()`
- →Standardize response and error payloads for consistent integration
How it works
The skill follows a contract-auth-implement-validate flow, defining API contracts, authentication, and authorization. It implements RPC or REST endpoints, standardizes responses and errors, and validates edge cases and costs.
Inputs & outputs
When to use frappe-api-design
- →Create whitelisted API method
- →Design REST endpoint for integration
- →Standardize API error responses
About this skill
Design de API no Frappe
Quando usar
Use esta skill quando o pedido envolver:
- criação de método
@frappe.whitelistpara frontend Desk/Portal; - criação ou revisão de endpoint REST no Frappe;
- definição de contrato de entrada/saída, paginação e filtros;
- revisão de autenticação/autorização em APIs com mutação de dados;
- padronização de resposta e erros para integrações externas.
Entregáveis esperados
- Contrato explícito de entrada, saída e erros.
- Endpoint RPC/REST com autorização coerente ao risco.
- Resposta previsível para sucesso e falha.
- Checklist final cobrindo segurança, performance e consistência.
Fluxo recomendado (contract → auth → implement → validate)
- Capturar intenção e contrato
- definir payload de entrada, campos obrigatórios/opcionais e formato de retorno;
- mapear cenários de erro (permissão, validação, não encontrado, conflito).
- Definir autenticação e autorização
- decidir se a API é autenticada ou pública;
- para mutações, validar papel/perfil e permissão no backend antes de persistir.
- Implementar RPC ou REST
- usar
@frappe.whitelist()para chamadas RPC de app/portal; - manter contrato estável e nomes claros para parâmetros.
- usar
- Padronizar resposta e erros
- retornar payload consistente, acionável e sem vazamento de detalhe sensível;
- diferenciar erros de validação, permissão e falha interna.
- Validar bordas e custo
- revisar paginação, filtros, ordenação e limites;
- evitar N+1 e SQL por interpolação.
Princípios mandatórios desta skill
- Regras críticas no backend (nunca somente no client).
- Autorização antes de qualquer mutação de dados.
- SQL sempre parametrizado quando necessário.
allow_guest=Trueapenas com requisito explícito e validações adicionais.ignore_permissions=Truesomente com justificativa clara e contexto controlado.- Operações pesadas devem considerar processamento assíncrono (
frappe.enqueue).
RPC com @frappe.whitelist
@frappe.whitelist()
def update_status(name, status):
if not frappe.db.has_permission("My DocType", "write", name):
frappe.throw("Permissão negada", frappe.PermissionError)
doc = frappe.get_doc("My DocType", name)
doc.status = status
doc.save()
return {"status": doc.status}
- Para mutação, validar também regras de negócio no servidor além da permissão.
- Se usar
allow_guest=True, documentar explicitamente por que o endpoint pode ser público.
Padrões REST
- Preferir comportamento stateless e contrato explícito de filtros.
- Respeitar
limit_startelimit_page_lengthpara listas. - Validar e normalizar parâmetros de paginação e ordenação.
- Não expor stack trace ou detalhes internos em erros de produção.
Padrão de resposta e erros
Sucesso
{
"ok": true,
"data": {
"name": "DOC-0001",
"status": "Ativo"
},
"meta": {
"request_id": "optional"
}
}
Erro
{
"ok": false,
"error": {
"code": "PERMISSION_DENIED",
"message": "Você não tem permissão para esta operação."
}
}
Diretrizes:
- manter
codeestável para consumo por integração; - usar mensagens claras em PT-BR sem detalhes internos;
- garantir que erros de validação sejam distinguíveis de erros de permissão.
Anti-padrões (evitar)
- Expor endpoint com mutação sem checar permissão no backend.
- Implementar validação crítica apenas no JavaScript do cliente.
- Usar SQL com interpolação de string.
- Publicar endpoint com
allow_guest=Truepor conveniência. - Usar
ignore_permissions=Truesem justificativa operacional. - Ignorar paginação em consultas de alto volume.
- Retornar erros inconsistentes para cenários equivalentes.
Checklist final
- Contrato de entrada/saída e erros está explícito.
- Autenticação/autorização revisadas para o risco da operação.
- Sem SQL inseguro e sem N+1 evitável.
- Paginação/filtros/ordenação validados para listas.
- Resposta e erro seguem padrão consistente e acionável.
-
allow_guest=Trueeignore_permissions=Truerevisados com justificativa. - Cenários de borda e falha principal foram cobertos.
When not to use it
- →Implementing critical rules only on the client-side
- →Using SQL with string interpolation
- →Exposing endpoints with mutation without backend permission checks
Limitations
- →Requires critical rules to be on the backend
- →Requires authorization before any data mutation
- →Requires SQL to be parameterized when necessary
How it compares
This skill provides a structured methodology for designing and implementing Frappe APIs with explicit contracts, reliable authentication, and standardized error handling, ensuring consistency and security beyond ad-hoc API development.
Compared to similar skills
frappe-api-design side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| frappe-api-design (this skill) | 0 | 1mo | No flags | Advanced |
| fastapi-templates | 520 | 2mo | No flags | Intermediate |
| fastapi-pro | 79 | 3mo | No flags | Advanced |
| add-vault-protocol | 1 | 10d | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
fastapi-pro
sickn33
Build high-performance async APIs with FastAPI, SQLAlchemy 2.0, and Pydantic V2. Master microservices, WebSockets, and modern Python async patterns. Use PROACTIVELY for FastAPI development, async optimization, or API architecture.
add-vault-protocol
tradingstrategy-ai
Add support for a new ERC-4626 vault protocol. Use when the user wants to integrate a new vault protocol like IPOR, Plutus, Morpho, etc. Requires vault smart contract address, protocol name, and protocol slug as inputs.
supabase-python
alinaqi
FastAPI with Supabase and SQLAlchemy/SQLModel
pagination
dadbodgeoff
Implement cursor-based and offset pagination for APIs. Covers efficient database queries, stable sorting, and pagination metadata.
jsonapi
prowler-cloud
Strict JSON:API v1.1 specification compliance. Trigger: When creating or modifying API endpoints, reviewing API responses, or validating JSON:API compliance.