remp / crm-api-module
CRM Api 模块
Requires
- php: ^8.1
- justinrainbow/json-schema: ^5.2
- spatie/array-to-xml: ^3.1
- tomaj/nette-api: ^2.6
- dev-master
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.11.0
- 2.10.0
- 2.9.0
- 2.8.0
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.2.3
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.0
- 1.0.0-beta2
- 1.0.0-beta1
- 0.39.0
- 0.38.0
- 0.37.0
- 0.36.0
- 0.35.0
- 0.34.0
- 0.33.0
- 0.32.0
- 0.31.0
- 0.30.0
- 0.29.0
- 0.28.0
- 0.27.0
- 0.26.0
- 0.25.0
- 0.24.0
- 0.23.0
- 0.22.0
- 0.21.0
- 0.20.0
- 0.18.0
- 0.17.0
- 0.16.0
- 0.15.0
- 0.14.0
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.0
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.1
- dev-release/1.2/api-module
This package is auto-updated.
Last update: 2024-09-20 12:56:16 UTC
README
此文档作为 CRM 骨架 文档的补充,与创建和注册 API 处理程序相关。
它描述了该模块提供的 API 处理程序,供他人使用。
启用模块
确保您已将扩展添加到 app/config/config.neon
文件中。
extensions: - Crm\ApiModule\DI\ApiModuleExtension
配置
预请求
模块允许您配置预请求处理。将以下代码片段添加到您的 config.neon
文件中
services: # ... apiHeadersConfig: setup: - setAllowedOrigins('*') - setAllowedHeaders('Content-Type', 'Authorization', 'X-Requested-With') - setAllowedHttpMethods('*') - setAllowedCredentials(true) - setAccessControlMaxAge(600) # seconds
您可以通过明确指定它们或使用通配符来配置允许的源。以下配置是有效的
setAllowedOrigins("*")
。匹配一切setAllowedOrigins("foo.bar", "*.foo.bar")
。匹配foo.bar
及其所有子域。setAllowedOrigins("foo.bar", "1.foo.bar")
。匹配foo.bar
和1.foo.bar
,但不是其他内容(也不是任何其他子域)。
API 请求日志记录
您可以在 CRM 管理员 - 配置部分全局启用或禁用 API 日志记录。如果启用日志记录,您可以进一步配置哪些特定路径应该记录或不应记录。
我们建议使用黑名单配置而不是白名单配置。否则,您可能会遇到这种情况,即在我们的一些 API 中,当您需要它们时,可能会缺少日志。
要启用黑名单,将以下代码片段添加到您的 config.neon
文件中
services: # ... apiLoggerConfig: setup: - setPathBlacklist([ Crm\ApiModule\Models\LoggerEndpointIdentifier('1', 'foo', 'bar'), ])
LoggerEndpointIdentifier
需要三个参数: version
、package
和 apiCall
- 与您注册新 API 处理程序时使用的相同参数。上面的代码片段将不会记录对 /api/v1/foo/bar
端点的请求。
在必要时,您也可以使用通配符
Crm\ApiModule\Models\LoggerEndpointIdentifier('*', 'foo', 'bar')
将匹配所有前往/api/*/foo/bar
的请求。Crm\ApiModule\Models\LoggerEndpointIdentifier('1', '*', '*')
将匹配所有前往/api/v3/*/*
的请求。
黑名单和白名单不能结合使用,后者配置的优先。
数据保留配置
您可以通过在项目配置文件中设置 application:cleanup
来配置删除旧仓库数据和它使用的列之前的时间。
apiLogsRepository: setup: - setRetentionThreshold('-2 months', 'created_at')
数据库表迁移
由于需要更改主键(int -> bigint),在包含大量数据(或具有主键溢出风险的 int)的表中,我们不得不创建迁移过程。由于一些表非常暴露,不能锁定超过几秒钟,我们决定创建新表,手动迁移数据,并在迁移过程中保持旧表和新表同步。
此迁移过程对于在特定版本后安装特定表的安装是必要的,并且是两步过程。
Api 日志迁移(安装版本低于 2.5.0)
包括 api_logs
表的迁移。
步骤
- 运行 phinx 迁移命令
phinx:migrate
,该命令创建新表api_logs_v2
(如果表中没有数据,迁移仅更改主键类型,下一步不再需要)。 - 运行命令
api:convert_api_logs_to_bigint
,该命令将旧表中的数据复制到新表(例如,从api_logs
到api_logs_v2
)。命令在迁移成功后原子性地重命名表(例如,api_logs
->api_logs_old
和api_logs_v2
->api_logs
),因此当迁移结束时,仅使用新表。
建议在成功迁移后至少运行2周(以保留备份数据,以防出现任何问题),再执行application:bigint_migration_cleanup api_logs
命令来删除剩余的表。
API文档
所有示例都使用http://crm.press
作为基础域名。请在执行示例之前将主机更改为您使用的域名。
所有示例都使用XXX
作为默认的授权令牌值,请将其替换为实际的令牌。
- API令牌。标准API密钥用于服务器间通信。它将调用应用程序作为一个整体进行识别。它们可以在CRM管理员界面(
/api/api-tokens-admin/
)中生成,每个API密钥都必须白名单才能访问特定的API端点。默认情况下,API密钥没有任何端点访问权限。 - 用户令牌。在登录过程中为每个用户生成,令牌在系统不同部分之间通信时识别单个用户。令牌可以从以下位置读取:
n_token
cookie(如果用户通过CRM登录)。/api/v1/users/login
端点的响应中 - 您可以将响应存储到自己的cookie/local storage/session中。
API响应可以包含以下HTTP代码
如果可能,响应将包含application/json
编码的有效载荷,其中包含进一步解释错误的消息。
GET /api/v1/token/check
API服务器用于检查在头部提供的Bearer令牌的有效性。
头部
示例
curl -v –X GET http://crm.press/api/v1/token/check \ -H "Content-Type:application/json" \ -H "Authorization: Bearer XXX"
响应
{ "status": "ok" }