关于 arcgis-custom-data-feeds
arcgis-custom-data-feeds 是一项用于编写和本地测试 ArcGIS Enterprise Custom Data Feeds 的 Node.js Provider 技能。它指导开发者按版本配置 Provider,并以 GeoJSON 将外部数据提供为 Feature Service;不涵盖部署和注册。
主要功能
- 01用 cdf CLI 创建应用和 Provider
- 02实现 GeoJSON 数据读取
- 03支持编辑、授权和元数据
- 04配置特定版本的 Provider
- 05检查字段、ID 和几何规则
适用场景
- 01为外部数据源构建 Provider
- 02部署前在本地测试 Provider
- 03针对特定 ArcGIS Enterprise 版本开发
- 04为上游数据存储添加受控编辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ valdesrosier/ skills --skill arcgis-custom-data-feeds安装后在 Claude Code 中输入/arcgis-custom-data-feeds确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/geojson-response-format.mdprovider-patterns.mdreferences/examples/editable-provider.mdminimal-provider.md详细介绍
ArcGIS Enterprise 自定义数据馈送(CDF)
自定义数据馈送是一个 Node.js 提供程序,运行在 ArcGIS Enterprise SDK 运行时中的 Koop.js 上,可从任意外部来源(REST API、数据库、文件)获取数据,并将其公开为标准 ArcGIS Feature Service。提供程序返回 GeoJSON;框架会将其转换为 ArcGIS 客户端使用的 GeoServices REST 规范。
在 ArcGIS Server 上部署和注册(上传 .cdpk、cdf register)不在本文范围内——本指南涵盖提供程序的编写和本地测试。
先确认目标 Enterprise 版本,再编写任何代码
CDF 在 ArcGIS Enterprise 11.1 中推出(10.x 中不存在),其功能受版本限制。你编写的提供程序完全取决于它必须运行的版本,因此请先确定目标版本:
- 询问此提供程序必须在哪些 ArcGIS Enterprise 版本上运行。针对较新运行时编译的提供程序无法在较旧服务器上运行——请针对最低目标版本构建。
- 12.x 需要重新编译。 提供程序必须在 12.x 中重新编译才能在那里运行;在 11.x 上构建的提供程序与 12.x 运行时不具备二进制兼容性。
- 开发计算机的 操作系统系列和 Node.js 主版本必须与目标服务器一致,否则编译后的提供程序将无法加载。
如需了解当前版本、各版本的功能列表以及任何重大变更,请查阅最新的 **ArcGIS Enterprise SDK CDF 指南**及其“新增功能”页面;不要依赖转述的版本对照表,因为它会过时。要确认某个类、方法或选项是否存在于特定版本,请以 arcgis-docs-lookup 技能为准。
12.0 代际分界
CDF 在 12.0 发生了根本性变化——请将 12.0 之前和 12.0 及之后视为两代,切勿混用它们的假设:
confignpm 模块在 12.0 中停用。 请将凭据存储在src/中的本地 JSON 文件里,并直接调用require()。在 11.1–11.5 中,config/default.json是标准做法(应用中所有提供程序的顶层键必须唯一)。- 12.0 升级陷阱: 使用过
config模块的提供程序在升级到 12.0 后不会自动重新注册。请在升级之前将其迁移到本地 JSON 配置。 getMetadata()(见下文)仅从 12.0 开始提供。
项目脚手架——cdf CLI
cdf createapp my-cdf-app # once per project
cd my-cdf-app
cdf createprovider my-provider # a provider inside the app
npm start # local dev server (HTTP :8080)
cdf export my-provider # produce a deployable .cdpk
生成的结构(核心部分):providers/my-provider/src/index.js(注册)、.../src/model.js(核心逻辑)、.../cdconfig.json(提供程序配置)、.../package.json(提供程序依赖)。
请在提供程序级别安装 npm 包(
providers/my-provider/),切勿在应用级别安装。切勿修改framework/——其中捆绑的 Koop 包为只读。
The Model 类
model.js 导出一个最多包含四个方法的类。“自”列记录的是稳定的发布历史,并非实时矩阵:
| 方法 | 必需 | 自 | 用途 |
|---|---|---|---|
getData(req) | 是 | 11.1 | 获取数据;返回 GeoJSON FeatureCollection |
editData(req, edits) | 否 | 11.4 | 处理 applyEdits(添加/更新/删除) |
authorize(req) | 否 | 11.5 | 请求前授权;拒绝时抛出异常 |
getMetadata() | 否 | 12.0 | 返回用于编辑重投影的 idField + inputCrs |
getData(req) 返回包含 metadata 块的 GeoJSON FeatureCollection。请使用 async/await 形式,切勿在同一方法中混用 async 和回调模式——这样会导致进程崩溃。完整的响应架构请参阅 references/geojson-response-format.md,完整获取与透传模式请参阅 references/provider-patterns.md。
关键 req 属性:req.params.layer('0'、'1'、……)、req.params.<key>(服务参数值)、req.query.where、req.query.resultOffset / req.query.resultRecordCount(分页)、req.query.returnCountOnly('true' → 返回 { count: N })、req._user(需要在服务上设置 forwardUserIdentity: true)。
GeoJSON 响应规则
- 同一图层中的所有要素必须具有相同的几何类型。
- 始终显式声明
fields——切勿依赖从第一个要素推断类型;这会导致类型错误。 - **始终将
idField设置为唯一的数值属性。**省略它会导致对完整要素进行哈希处理(速度慢且容易碰撞)。对于可编辑的数据提供程序,idField必须引用一个真实字段;不支持自动生成的 OID。 - 默认 CRS 为 WGS84(4326);如果数据使用其他坐标系,请将
metadata.inputCrs设置为对应的 WKID。 - 对于多图层服务,当
req.params.layer未定义时,返回{ layers: [...], tables: [], metadata: { name, inputCrs } }。 - 在透传模式中,对于已在上游处理的每项过滤条件,将
filtersApplied(where、geometry、objectIds、resultOffset、resultRecordCount)设置为true,以免框架重复应用。 ttl设置 LRU 缓存的 TTL,单位为秒(缓存容量:500 个元素)。
在 editData() 中防护破坏性编辑
editData() 会将 adds / updates / deletes 写入数据提供程序的上游存储(数据库或外部 API)——这些是不可逆的数据操作,因此在生成任何会执行更新或删除的 editData 代码之前,必须按顺序满足以下每一点:
- **说明目标。**指出上游系统,以及写入操作所针对的确切存储/集合/表。目标未明确说明时必须停止。
- **展示影响范围。**说明更新/删除会影响什么(涉及哪些记录、大约有多少条),让用户了解即将更改或丢失的内容。
- **确认不是生产环境。**明确说明这一点,并在继续之前取得用户确认。
- **优先提供可逆的方案。**先提供读取/计数方案,以便在执行破坏性写入前了解影响范围。
- **绝不盲目输出。**在满足第 1–4 点并取得用户确认之前,不提供更新/删除代码——即使用户听起来很有把握也不例外。
返回 { addResults, updateResults, deleteResults },其中每项均为 { objectId, success, error? }。错误代码:1017 表示插入,1018 表示删除,1019 表示更新。框架不会强制执行 rollbackOnFailure——请在 editData() 中自行实现事务逻辑。使用 authorize(req) 门控写入(抛出异常以拒绝)。
配置和密钥
- **12.0+:**在
src/中对本地 JSON 配置文件使用require()。将其添加到.gitignore。 - **11.1–11.5:**使用
config模块(config/default.json)。 - 切勿将凭据硬编码;切勿提交包含真实密钥的配置 JSON。
完成条件
已固定目标 Enterprise 版本(并针对最低目标版本构建提供程序;如有需要,针对 12.x 重新编译);12.0 之前与 12.0+ 的配置处理方式与该版本匹配;每个 getData 响应都声明了 fields 和数值型 idField,且每个图层仅使用一种几何类型;密钥存储在已加入 gitignore 的配置文件中,绝不内联;任何 editData 更新或删除操作都已通过防护检查;并且已通过 arcgis-docs-lookup 对照 Enterprise SDK CDF 在线指南确认特定版本的相关说明。
参考文件
| 文件 | 何时阅读 |
|---|---|
| references/geojson-response-format.md | 完整的元数据架构、字段类型、多图层格式、编辑模板 |
| references/provider-patterns.md | 完整获取与透传、计数/范围快捷方式、上游身份验证 |
| references/examples/minimal-provider.md | 完整可运行的只读提供程序(示例,目标版本为 12.0) |
| references/examples/editable-provider.md | 带数据库后端的完整可编辑提供程序(示例,目标版本为 12.0) |