{"id":"docs/api-parsers","source":"docs","sourceLabel":"docs/","sourcePath":"docs/api-parsers.md","routePath":"/fastapp/public-docs/page/docs/api-parsers","rawPath":"/fastapp/public-docs/raw/docs/api-parsers","slug":["docs","api-parsers"],"slugPath":"docs/api-parsers","title":"API Parsers e Exportacao","description":"As APIs dinamicas do FastApp suportam dois fluxos parecidos, mas com usos diferentes:","headings":["API Parsers e Exportacao","Parsers Inline","Exportacao De Arquivos","Escopos","Configuracao Por Objeto","UI","Limites"],"wordCount":320,"markdown":"# API Parsers e Exportacao\r\n\r\nAs APIs dinamicas do FastApp suportam dois fluxos parecidos, mas com usos\r\ndiferentes:\r\n\r\n- Parsers inline via `$parser` ou `$format`, usados para transformar a resposta\r\n  da listagem em texto tecnico.\r\n- Exportacao de arquivos via endpoint `/export`, usada pela UI para download em\r\n  formatos de escritorio.\r\n\r\n## Parsers Inline\r\n\r\nUse parsers quando quiser mudar o corpo da resposta da propria listagem.\r\n\r\n| Format | Parameter | Content-Type | Description |\r\n| :--- | :--- | :--- | :--- |\r\n| **JSON** | `json` | `application/json` | Default format. Returns full envelope (`data`, `total`, etc). |\r\n| **CSV** | `csv` | `text/csv` | Returns raw records as a CSV table. |\r\n| **YAML** | `yaml` | `text/yaml` | Returns raw records in YAML format. |\r\n| **Markdown** | `markdown`, `md` | `text/markdown` | Returns GitHub-flavored markdown tables. |\r\n\r\nExamples:\r\n\r\n```http\r\nGET /api/v1/data/app/lead?$parser=csv\r\nGET /api/v1/data/app/user?$parser=yaml\r\nGET /api/v1/data/app/lead/123?$parser=markdown\r\n```\r\n\r\nParsers continuam funcionando com data sources externos: a resposta externa e\r\nnormalizada antes da transformacao.\r\n\r\n## Exportacao De Arquivos\r\n\r\nUse o endpoint dedicado quando a intencao for baixar arquivo com headers de\r\ndownload:\r\n\r\n```http\r\nGET /api/v1/data/{app}/{object}/export?format=csv\r\n```\r\n\r\nFormatos suportados:\r\n\r\n| Format | Parameter | Content-Type |\r\n| :--- | :--- | :--- |\r\n| **CSV** | `format=csv` | `text/csv; charset=utf-8` |\r\n| **Excel** | `format=xlsx` | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\r\n| **PDF** | `format=pdf` | `application/pdf` |\r\n| **JSON** | `format=json` | `application/json; charset=utf-8` |\r\n\r\nO endpoint define `Content-Disposition: attachment` e gera filename usando o\r\ntemplate do objeto, por padrao `{app}-{object}-{date}`.\r\n\r\n## Escopos\r\n\r\n| Scope | Uso |\r\n| :--- | :--- |\r\n| `current_query` | Exporta a consulta filtrada/sortida, ignorando paginacao de tela e respeitando `max_rows`. |\r\n| `current_page` | Exporta apenas a pagina atual com `$limit` e `$skip`. |\r\n| `selected` | Exporta os IDs enviados em `ids=...`. |\r\n\r\nExamples:\r\n\r\n```http\r\nGET /api/v1/data/task-board/task_item/export?format=xlsx&scope=current_query&status=TODO\r\nGET /api/v1/data/task-board/task_item/export?format=csv&scope=current_page&$limit=25&$skip=50\r\nGET /api/v1/data/task-board/task_item/export?format=pdf&scope=selected&ids=a1,b2,c3\r\n```\r\n\r\nO endpoint reaproveita filtros, sort, app hint, RBAC, data sources externos,\r\nrelacoes e campos computed do contrato dinamico de listagem.\r\n\r\n## Configuracao Por Objeto\r\n\r\nTodo objeto nasce exportavel por padrao. Para customizar:\r\n\r\n```json\r\n{\r\n  \"ui_config\": {\r\n    \"export\": {\r\n      \"enabled\": true,\r\n      \"formats\": [\"csv\", \"xlsx\", \"pdf\", \"json\"],\r\n      \"scopes\": [\"current_query\", \"current_page\", \"selected\"],\r\n      \"max_rows\": 5000,\r\n      \"include_hidden_fields\": false,\r\n      \"filename_template\": \"{app}-{object}-{date}\",\r\n      \"fields\": [\"id\", \"nome\", \"status\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nRegras importantes:\r\n\r\n- `enabled: false` remove o botao e bloqueia o endpoint para o objeto.\r\n- `formats` restringe o menu e o servidor.\r\n- `scopes` restringe consulta, pagina e selecionados.\r\n- `fields` define as colunas exportadas.\r\n- `include_hidden_fields` permite incluir campos com `show_in_list: false`.\r\n- Propriedades com `exportable: false` nunca entram na exportacao.\r\n\r\n## UI\r\n\r\nO botao de exportacao fica em `CoreExportDataButton` e e usado por:\r\n\r\n- `CoreDynamicCRUD`, cobrindo tabela, lista, kanban, agenda, mapa e views\r\n  hibridas.\r\n- CMS object views como `object_table`, `object_list`, `object_list_simple`,\r\n  `object_list_integrated`, `object_kanban` e `object_schedule`.\r\n\r\n## Limites\r\n\r\n- `max_rows` default: `5000`.\r\n- PDF limita a tabela renderizada as primeiras colunas para manter legibilidade.\r\n- Exportacao massiva/assincrona, relatorios customizados e envio agendado por\r\n  email ficam fora desta sprint.\r\n"}