From oracle-ai-data-platform-workbench-spark-connectors
Pull data from any REST API into a Spark DataFrame using the AIDP `aidataplatform` Generic REST connector. Use when the user has a non-Fusion / non-EPM / non-Essbase REST endpoint with a `manifest.url` describing the schema. Auth is HTTP Basic with derived properties driving query parameters.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oracle-ai-data-platform-workbench-spark-connectors:aidp-rest-genericThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Read from arbitrary REST APIs as a Spark DataFrame. The connector requires a server-published **manifest** (a small JSON describing each API endpoint, parameters, and response schema) so it knows how to parse responses without a custom integration.
aidp-rest-generic — Generic REST via AIDP aidataplatform (type=GENERIC_REST)Read from arbitrary REST APIs as a Spark DataFrame. The connector requires a server-published manifest (a small JSON describing each API endpoint, parameters, and response schema) so it knows how to parse responses without a custom integration.
aidp-fusion-rest. Different shape (no manifest; ≤499/page paging).aidp-fusion-bicc.aidp-epm-cloud.aidp-essbase.import os
from oracle_ai_data_platform_connectors.aidataplatform import (
AIDP_FORMAT, aidataplatform_options,
)
opts = aidataplatform_options(
type="GENERIC_REST",
user=os.environ["REST_USER"],
password=os.environ["REST_PASSWORD"],
schema=os.environ.get("REST_SCHEMA", "default"),
extra={
"base.url": os.environ["REST_BASE_URL"], # e.g. http://api.internal/v1
"manifest.url": os.environ["REST_MANIFEST_URL"], # e.g. http://api.internal/v1/manifest
"auth.type": "basic",
"api": os.environ["REST_API"], # e.g. "getOrdersByOrderID"
# Any number of derived.property.<name> values feed into the API call:
"derived.property.orderNo": os.environ.get("REST_ORDER_NO", "12345"),
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show(5)
The manifest describes:
apis — the named API operations (e.g. getOrdersByOrderID)parameters — what the connector should send (path/query/body)responseSchema — the Spark schema the connector should inferIf you don't have a manifest URL, this connector won't work — fall back to the requests-based pattern in aidp-fusion-rest and adapt for your API.
Pass each as a separate extra={} key:
extra={
"base.url": "...",
"manifest.url": "...",
"auth.type": "basic",
"api": "searchOrders",
"derived.property.fromDate": "2025-01-01",
"derived.property.toDate": "2025-12-31",
"derived.property.status": "OPEN",
}
manifest.path)If the manifest is a static file you've uploaded to your AIDP workspace or a Volume — instead of being served over HTTP — use manifest.path instead of manifest.url. Same shape, different source. Useful when the manifest is hand-authored or version-pinned alongside your notebook.
opts = aidataplatform_options(
type="GENERIC_REST",
user=os.environ["REST_USER"],
password=os.environ["REST_PASSWORD"],
schema="default",
extra={
"base.url": os.environ["REST_BASE_URL"],
"manifest.path": "/Volumes/myvol/manifests/orders_api.json",
"auth.type": "basic",
"api": "searchOrders",
"derived.property.status": "OPEN",
},
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
The path can be:
/Volumes/<catalog>/<schema>/<volume>/path/to/manifest.json (AIDP Volume)/Workspace/Shared/.../manifest.json (workspace file — works but FUSE-flaky)Volume paths are the preferred location.
auth.type=basic only. If the API uses OAuth / API key headers / mTLS, this connector won't help — use the Python requests path.schema option is the AIDP/Spark logical schema for the resulting DataFrame, not a server-side one. Use default if unsure.maxPageSize, the connector batches automatically.npx claudepluginhub daiiis/claude-code-plugins --plugin oracle-ai-data-platform-workbench-spark-connectorsGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.