Skip to content
Back to skills

Resource And Api

ASecurity

"Route and operate GeoNode resource REST workflows, safe uploads,

  • 247 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 8, 2026
toolsshellnodeapidatabasedocumentation

Works with

  • terminal
  • api

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill resource-and-api --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Resource And Api?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Resource And Api
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-resource-and-api/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-resource-and-api)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: resource-and-api
description: "Route and operate GeoNode resource REST workflows, safe uploads,
  asynchronous execution requests, downloads, metadata changes, and
  resource-level permissions for datasets, documents, maps, and geoapps."
disable-model-invocation: true
metadata:
  disco-role: operating
license: NOASSERTION
---

# Resource and API

Use this sub-skill when the task touches a GeoNode resource through HTTP: list
or inspect resources, upload or update data, create maps or geoapps, attach
metadata/assets, follow an execution request, download content, or change
resource-facing permissions.

## First route

1. Establish the deployed site origin explicitly. Do not infer it from a
   payload, a service URL, or a browser address. Use the API helper only with
   an explicit `--base-url`.
2. Establish the identity and permissions needed for the operation. Anonymous
   reads may work for advertised public resources; uploads and mutations need
   an authenticated account and resource-level permissions.
3. Read [api-reference.md](references/api-reference.md) for the exact route,
   method, serializer shape, response wrapper, and request example.
4. For an upload, update, copy, delete, permission, or remote-resource action,
   read [resource-lifecycle.md](references/resource-lifecycle.md) before
   sending the request, then read [upload-formats.md](references/upload-formats.md)
   for file and data assumptions.
5. Use [troubleshooting.md](references/troubleshooting.md) when a response is
   not the expected status or an execution remains pending.

## API boundaries

- Prefer the versioned REST resources below `/api/v2/` for resource operations.
  The legacy Tastypie resources below `/api/api/` have different serializers,
  filters, and authorization; do not mix their payloads with v2 payloads.
- The v2 resource collection is `/api/v2/resources/`; typed collections are
  `/api/v2/datasets/`, `/api/v2/documents/`, `/api/v2/maps/`, and
  `/api/v2/geoapps/`. The deployed upload route must be confirmed with the
  named `importer_upload` route or the instance's published API documentation;
  some deployments expose it as `/api/v2/uploads/upload`, while the snapshot's
  root URL declaration is not version-prefixed.
- Treat response `execution_id` or `exec_id` as opaque UUIDs. Never guess an
  execution URL or assume that HTTP 201 means the resource is published.
- A package import or serializer check proves neither database persistence,
  GeoServer publication, object storage, Redis/Celery execution, nor remote OGC
  access.

## Operating procedure

### Read and preflight

- Start with `GET /api/v2/resources/` or the typed collection. Record the
  returned `pk`, `uuid`, `resource_type`, `subtype`, `perms`, `is_published`,
  `is_approved`, and `download_urls` before mutating anything.
- Use `search`, repeated `search_fields`, `filter{...}`, `extent`,
  `metadata_only`, `favorite`, `page`, and `page_size` deliberately. Preserve
  the `links`, `total`, `page`, and `page_size` pagination envelope.
- For a private resource, authenticate before interpreting an empty list as
  absence. A filtered permission result is not proof that the resource does
  not exist.

### Mutate

- Use typed `PATCH` for ordinary metadata changes where supported. Use the
  dedicated dataset metadata `PUT` for an ISO metadata file and the metadata
  API for schema-shaped JSON. Check the required permission before attempting
  either.
- Use typed map/geoapp `POST` only with a serializer-valid payload; map layer
  relations are embedded and are transactionally saved. Document creation is
  intentionally a file/URL upload workflow, not a typed `POST`.
- For dataset data, use the importer with an explicit `action`: `upload`,
  `replace`, `upsert`, `create`, `resource_style_upload`, or
  `resource_metadata_upload`. Capture the returned execution identifier.
- Poll the returned status endpoint with bounded delay and a deadline. Terminal
  `finished` is success; `failed` is failure; `ready` and `running` require
  worker/service diagnosis, not repeated unbounded requests.

### Safety-sensitive operations

- Obtain and inspect `perms` or `GET .../permissions` before changing access.
  `PUT` replaces the proposed compact permission set; `PATCH` merges it. Do
  not send a partial `PUT` unless replacement is intended.
- Treat `DELETE /api/v2/resources/{pk}/delete`, upload `replace`, `upsert`, and
  asset removal as destructive. Confirm the `pk`, backup/retention policy, and
  target dataset type first. Prefer a dry read and a saved execution id.
- Download only through a URL returned by the resource and only after checking
  `download_resourcebase`. Dataset downloads require a locally available,
  downloadable resource; maps and geoapps normally have no data download URL.
- Do not place Basic credentials, bearer tokens, remote-service passwords, or
  full secret-bearing payloads in shell history, logs, or issue reports.

## Checks and handoff

A successful call must be checked at three levels: HTTP status and content
shape, resource/execution state, and service-side consequences when applicable.
For uploads, validate the archive before sending it with
`scripts/validate-upload-archive.py`; it inspects without extracting. For a
read-only request, use `scripts/api_request.py --help` and an explicit base URL.

If the database, PostGIS, GDAL/OGR, GeoServer, Redis/Celery, media storage,
remote endpoint, credentials, or browser stack is unavailable, report that
specific gate as unverified and hand back the execution id, response body,
and next diagnostic—not a claim of publication or completion.

## References and scripts

- [api-reference.md](references/api-reference.md): v2 routes, filters, auth,
  payloads, response envelopes, downloads, and permissions.
- [resource-lifecycle.md](references/resource-lifecycle.md): preflight,
  asynchronous state transitions, metadata/resource actions, and safe delete.
- [upload-formats.md](references/upload-formats.md): handlers, actions,
  supported formats, required companion files, and data constraints.
- [troubleshooting.md](references/troubleshooting.md): owned failure modes and
  bounded recovery paths.
- `scripts/api_request.py`: explicit-origin, JSON/GET, bearer-from-environment
  request probe with non-secret output.
- `scripts/validate-upload-archive.py`: non-extracting ZIP safety validator
  with a tiny self-test fixture.

Files in this skill

  • SKILL.md6.3 KB
  • references/api-reference.md10.5 KB
  • references/resource-lifecycle.md8 KB
  • references/troubleshooting.md7.2 KB
  • references/upload-formats.md6.6 KB
  • scripts/api_request.py5.4 KB
  • scripts/validate-upload-archive.py5.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.