接口参考
API 参考
相关源文件
本章引用的主要源码文件:
mayan/apps/cabinets/tests/test_wizard_steps.pymayan/apps/cabinets/wizard_steps.pymayan/apps/dependencies/dependencies.pymayan/apps/documents/apps.pymayan/apps/documents/icons.pymayan/apps/documents/links/document_version_links.pymayan/apps/documents/managers.pymayan/apps/documents/permissions.pymayan/apps/documents/tasks.pymayan/apps/documents/urls.pymayan/apps/documents/views/document_type_views.pymayan/apps/documents/views/document_version_views.pymayan/apps/documents/views/document_views.pymayan/apps/metadata/api.pymayan/apps/metadata/api_views.pymayan/apps/metadata/forms.pymayan/apps/metadata/models.pymayan/apps/metadata/serializers.pymayan/apps/metadata/tests/literals.pymayan/apps/metadata/tests/mixins.pymayan/apps/metadata/tests/test_forms.pymayan/apps/metadata/tests/test_models.pymayan/apps/metadata/tests/test_wizard_steps.pymayan/apps/metadata/urls.pymayan/apps/metadata/wizard_steps.pymayan/apps/quotas/tests/test_hooks.pymayan/apps/sources/admin.pymayan/apps/sources/api_views.pymayan/apps/sources/apps.pymayan/apps/sources/classes.pymayan/apps/sources/dependencies.pymayan/apps/sources/forms.pymayan/apps/sources/links.pymayan/apps/sources/literals.pymayan/apps/sources/migrations/0010_auto_20151001_0055.pymayan/apps/sources/migrations/0027_auto_20201030_0259.pymayan/apps/sources/models.pymayan/apps/sources/serializers.pymayan/apps/sources/source_backends/sane_scanner_backends.pymayan/apps/sources/tasks.pymayan/apps/sources/tests/test_api.pymayan/apps/sources/tests/test_views.pymayan/apps/sources/urls.pymayan/apps/sources/wizards.pymayan/apps/tags/tests/literals.pymayan/apps/tags/tests/test_document_tag_api.pymayan/apps/tags/tests/test_indexing.pymayan/apps/tags/tests/test_tag_api.pymayan/apps/tags/tests/test_tag_document_api.pymayan/apps/tags/tests/test_wizard_steps.pymayan/apps/tags/wizard_steps.py
目的与范围
本文档提供 Mayan EDMS REST API 的全面参考文档,包括端点规范、认证机制、请求/响应格式以及序列化模式。该 API 支持以编程方式访问文档管理、元数据处理、源配置和工作流操作。
有关底层数据模型和数据库模式的信息,请参阅数据模型参考。有关 API 相关配置设置和部署选项,请参阅配置参考。
API 架构总览
整体 API 结构
来源:mayan/apps/documents/urls.py:522-688, mayan/apps/sources/urls.py:73-86, mayan/apps/metadata/urls.py:100-129, mayan/apps/rest_api/fields.py:30, mayan/apps/documents/apps.py:285-287
URL 路由结构
来源:mayan/apps/documents/urls.py:522-688, mayan/apps/sources/urls.py:73-86, mayan/apps/metadata/urls.py:100-129
核心 API 端点
文档管理端点
| HTTP 方法 | 端点 | 视图类 | 用途 |
|---|---|---|---|
| GET, POST | /api/documents/ | APIDocumentListView | 列出/创建文档 |
| POST | /api/documents/upload/ | APIDocumentUploadView | 上传新文档 |
| GET, PUT, PATCH, DELETE | /api/documents/{id}/ | APIDocumentDetailView | 文档操作 |
| POST | /api/documents/{id}/type/change/ | APIDocumentChangeTypeView | 更改文档类型 |
来源:mayan/apps/documents/urls.py:522-564
文档文件管理
| HTTP 方法 | 端点 | 视图类 | 用途 |
|---|---|---|---|
| GET | /api/documents/{id}/files/ | APIDocumentFileListView | 列出文档文件 |
| GET, PUT, PATCH, DELETE | /api/documents/{id}/files/{file_id}/ | APIDocumentFileDetailView | 文件操作 |
| GET | /api/documents/{id}/files/{file_id}/download/ | APIDocumentFileDownloadView | 下载文件 |
| GET | /api/documents/{id}/files/{file_id}/pages/ | APIDocumentFilePageListView | 列出文件页面 |
来源:mayan/apps/documents/urls.py:566-596
源管理
| HTTP 方法 | 端点 | 视图类 | 用途 |
|---|---|---|---|
| GET, POST | /api/sources/ | APISourceListView | 列出/创建源 |
| GET, PUT, PATCH, DELETE | /api/sources/{id}/ | APISourceView | 源操作 |
| GET, POST | /api/sources/{id}/actions/{action}/ | APISourceActionDetailView | 执行源操作 |
来源:mayan/apps/sources/urls.py:73-86
元数据管理
| HTTP 方法 | 端点 | 视图类 | 用途 |
|---|---|---|---|
| GET, POST | /api/metadata_types/ | APIMetadataTypeListView | 列出/创建元数据类型 |
| GET, PUT, PATCH, DELETE | /api/metadata_types/{id}/ | APIMetadataTypeView | 元数据类型操作 |
| GET, POST | /api/documents/{id}/metadata/ | APIDocumentMetadataListView | 文档元数据 |
| GET, PUT, PATCH, DELETE | /api/documents/{id}/metadata/{meta_id}/ | APIDocumentMetadataView | 元数据操作 |
来源:mayan/apps/metadata/urls.py:100-129
认证与权限
权限系统集成
来源:mayan/apps/metadata/api_views.py:31-37, mayan/apps/sources/api_views.py:21-24, mayan/apps/documents/apps.py:437-486
权限模式
API 使用三种主要的权限模式:
- 对象权限(
mayan_object_permissions):应用于特定的模型实例 - 视图权限(
mayan_view_permissions):应用于整个视图/端点 - 外部对象权限(
mayan_external_object_permissions):应用于相关对象
来源:mayan/apps/metadata/api_views.py:31-37, mayan/apps/sources/api_views.py:105-109
序列化系统
动态字段选择
来源:mayan/apps/documents/apps.py:285-287, mayan/apps/sources/apps.py:72-74, mayan/apps/rest_api/fields.py:30
关键序列化器类
| 序列化器类 | 模型 | 用途 | 文件位置 |
|---|---|---|---|
DocumentSerializer | Document | 文档表示 | documents.serializers |
SourceSerializer | Source | 源配置 | sources.serializers |
MetadataTypeSerializer | MetadataType | 元数据类型定义 | metadata.serializers |
DocumentMetadataSerializer | DocumentMetadata | 文档元数据值 | metadata.serializers |
来源:mayan/apps/metadata/serializers.py:24-37, mayan/apps/sources/serializers.py:10-21
请求/响应模式
文档上传流程
来源:mayan/apps/documents/tasks.py:140-194, mayan/apps/sources/models.py:87-161
元数据管理流程
来源:mayan/apps/metadata/api_views.py:22-55, mayan/apps/metadata/serializers.py:88-144
源操作系统
源后端操作
来源:mayan/apps/sources/api_views.py:15-97, mayan/apps/sources/classes.py:91-232
操作配置
源操作使用 SourceBackendAction 命名元组定义,包含以下字段:
name:操作标识符accept_files:操作是否接受文件上传arguments:必需参数confirmation:是否需要确认method:要执行的后端方法
来源:mayan/apps/sources/classes.py:91-108
错误处理与状态码
标准 HTTP 状态码
| 状态码 | 用途 | 示例场景 |
|---|---|---|
| 200 OK | 成功的 GET、PUT、PATCH | 文档已检索、元数据已更新 |
| 201 Created | 成功的 POST | 文档已创建、元数据已添加 |
| 204 No Content | 成功的 DELETE | 文档已删除、元数据已移除 |
| 400 Bad Request | 校验错误 | 无效的元数据值、缺少必填字段 |
| 401 Unauthorized | 需要认证 | 未提供有效凭证 |
| 403 Forbidden | 权限被拒绝 | 用户缺少所需权限 |
| 404 Not Found | 资源未找到 | 文档 ID 不存在 |
校验错误格式
API 校验错误遵循 Django REST Framework 约定:
{
"field_name": ["该字段的错误消息"],
"non_field_errors": ["通用校验错误"]
}
来源:mayan/apps/metadata/serializers.py:118-144
集成示例
创建文档并附带元数据
POST /api/documents/upload/
Content-Type: multipart/form-data
{
"document_type_id": 1,
"file": "<文件数据>",
"metadata": [
{
"metadata_type_id": 1,
"value": "发票 #12345"
}
]
}
执行源操作
POST /api/sources/1/actions/upload/
Content-Type: application/json
{
"arguments": {
"document_type_id": 1,
"expand": false
},
"file": "<文件数据>"
}
来源:mayan/apps/sources/api_views.py:51-62, mayan/apps/metadata/api_views.py:50-54