[go: nahoru, domu]

Skip to content

Quickstart

This guide will walk you through the full sequence of requests to create and publish a record in InvenioRDM, including file uploads. We'll use cURL commands for each step.

Prerequisites

  • Access to an InvenioRDM instance (we'll use the InvenioRDM demo instance at https://inveniordm.web.cern.ch for this example)
  • An API token for authentication
  • curl installed on your machine

Create a Draft upload

First, create a draft upload with a minimal set of metadata.

curl -i -X POST https://inveniordm.web.cern.ch/api/records \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer ${TOKEN}" \
     -d '
{
  "metadata": {
    "title": "Poltergeist activity readings dataset",
    "creators": [
      {
        "person_or_org": {
          "given_name": "Josiah",
          "family_name": "Carberry",
          "type": "personal",
          "identifiers": [{"identifier": "0000-0002-1825-0097"}]
        },
        "affiliations": [{"name": "Brown University"}]
      }
    ],
    "publisher": "InvenioRDM",
    "publication_date": "2024-05-14",
    "resource_type": {"id": "dataset"}
  }
}'
HTTP/1.1 201 CREATED
Content-Type: application/json

{
  "id": "ha4g3-7x208",
  "is_draft": true,
  "is_published": false,
  "status": "draft",
  "created": "2024-05-14T12:02:42.925027+00:00",
  "updated": "2024-05-14T12:02:43.001866+00:00",
  "expires_at": "2024-05-14 12:02:42.925074",
  "revision_id": 4,
  "metadata": {
    "creators": [
      {
        "affiliations": [{ "name": "Brown University" }],
        "person_or_org": {
          "family_name": "Carberry",
          "given_name": "Josiah",
          "type": "personal",
          "identifiers": [
            { "identifier": "0000-0002-1825-0097", "scheme": "orcid" }
          ],
          "name": "Carberry, Josiah"
        }
      }
    ],
    "resource_type": {
      "id": "dataset",
      "title": { "de": "Datensatz", "en": "Dataset" }
    },
    "publication_date": "2024-05-14",
    "title": "Poltergeist activity readings dataset",
    "publisher": "InvenioRDM"
  },
  "access": {
    "files": "public",
    "record": "public",
    "status": "metadata-only",
    "embargo": { "reason": null, "active": false }
  },
  "parent": {
    "access": { "links": [], "owned_by": [{ "user": 25 }] },
    "id": "bhgqt-2ke02",
    "communities": {}
  },
  "versions": { "is_latest_draft": true, "index": 1, "is_latest": false },
  "files": { "enabled": true, "order": [] },
  "pids": {},
  "links": {
    "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft",
    "self_html": "https://inveniordm.web.cern.ch/uploads/ha4g3-7x208",
    "self_iiif_manifest": "https://inveniordm.web.cern.ch/api/iiif/draft:ha4g3-7x208/manifest",
    "self_iiif_sequence": "https://inveniordm.web.cern.ch/api/iiif/draft:ha4g3-7x208/sequence/default",
    "files": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files",
    "archive": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files-archive",
    "record": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208",
    "record_html": "https://inveniordm.web.cern.ch/records/ha4g3-7x208",
    "publish": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/actions/publish",
    "review": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/review",
    "versions": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/versions",
    "access_links": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/access/links",
    "reserve_doi": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/pids/doi",
    "communities": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/communities",
    "communities-suggestions": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/communities-suggestions",
    "requests": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/requests"
  }
}

Upload a file

Initialize the file upload for a data.csv file.

curl -i -X POST https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer ${TOKEN}" \
     -d '
[
  {"key": "data.csv"}
]'
HTTP/1.1 201 CREATED
Content-Type: application/json

{
  "enabled": true,
  "default_preview": null,
  "order": [],
  "entries": [
    {
      "key": "data.csv",
      "status": "pending",
      "created": "2024-05-14T12:14:33.825316+00:00",
      "updated": "2024-05-14T12:14:33.830465+00:00",
      "metadata": null,
      "links": {
        "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv",
        "content": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/content",
        "commit": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/commit"
      }
    }
  ],
  "links": {
    "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files",
    "archive": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files-archive"
  }
}

Upload the file content.

Note

Replace path/to/your/local/file/myfile.txt with the actual path to the file you want to upload.

curl -i -X PUT https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/content \
     -H "Content-Type: application/octet-stream" \
     -H "Authorization: Bearer ${TOKEN}" \
     --data-binary @path/to/your/local/file/data.csv
HTTP/1.1 200 OK
Content-Type: application/json

{
  "key": "data.csv",
  "created": "2024-05-14T12:14:33.825316+00:00",
  "updated": "2024-05-14T12:14:33.830465+00:00",
  "status": "pending",
  "metadata": null,
  "links": {
    "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv",
    "content": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/content",
    "commit": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/commit"
  }
}

Commit the uploaded file.

curl -i -X POST https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/commit \
     -H "Authorization: Bearer ${TOKEN}"
HTTP/1.1 200 OK
Content-Type: application/json

{
  "key": "data.csv",
  "created": "2024-05-14T12:14:33.825316+00:00",
  "updated": "2024-05-14T12:21:13.496989+00:00",
  "status": "completed",
  "metadata": null,
  "version_id": "a60d5e5b-6a98-4df0-ab3d-833f04942f8c",
  "file_id": "cba486b9-a910-4f06-aaa3-f6fb8e37e60b",
  "checksum": "md5:55ec0ec499334e6ad6bf166959d52a1e",
  "bucket_id": "1bc100b6-8730-4ee3-86ec-4015bb8d8dc3",
  "storage_class": "L",
  "size": 124,
  "mimetype": "text/csv",
  "links": {
    "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv",
    "content": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/content",
    "commit": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/files/data.csv/commit"
  }
}

Publish the Draft

Finally, publish the draft to make it a public record.

curl -i -X POST https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/actions/publish \
     -H "Authorization: Bearer ${TOKEN}"
HTTP/1.1 202 ACCEPTED
Content-Type: application/json

{
  "id": "ha4g3-7x208",
  "is_draft": false,
  "is_published": true,
  "status": "published",
  "created": "2024-05-14T12:22:34.225249+00:00",
  "updated": "2024-05-14T12:22:34.344048+00:00",
  "revision_id": 3,
  "metadata": {
    "creators": [
      {
        "affiliations": [{ "name": "Brown University" }],
        "person_or_org": {
          "family_name": "Carberry",
          "given_name": "Josiah",
          "type": "personal",
          "identifiers": [
            { "identifier": "0000-0002-1825-0097", "scheme": "orcid" }
          ],
          "name": "Carberry, Josiah"
        }
      }
    ],
    "resource_type": {
      "id": "dataset",
      "title": { "de": "Datensatz", "en": "Dataset" }
    },
    "publication_date": "2024-05-14",
    "title": "Poltergeist activity readings dataset",
    "publisher": "InvenioRDM"
  },
  "access": {
    "files": "public",
    "record": "public",
    "status": "open",
    "embargo": { "reason": null, "active": false }
  },
  "parent": {
    "access": { "links": [], "owned_by": [{ "user": 25 }] },
    "id": "bhgqt-2ke02",
    "communities": {}
  },
  "pids": {
    "oai": {
      "identifier": "oai:inveniordm.web.cern.ch:ha4g3-7x208",
      "provider": "oai"
    },
    "doi": {
      "identifier": "10.81088/ha4g3-7x208",
      "client": "datacite",
      "provider": "datacite"
    }
  },
  "versions": { "is_latest_draft": true, "index": 1, "is_latest": true },
  "files": { "enabled": true, "order": [] },
  "custom_fields": {},
  "stats": {
    "all_versions": {
      "unique_downloads": 0,
      "data_volume": 0.0,
      "downloads": 0,
      "unique_views": 0,
      "views": 0
    },
    "this_version": {
      "unique_downloads": 0,
      "data_volume": 0.0,
      "downloads": 0,
      "unique_views": 0,
      "views": 0
    }
  },
  "links": {
    "self": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208",
    "self_html": "https://inveniordm.web.cern.ch/records/ha4g3-7x208",
    "self_doi": "https://inveniordm.web.cern.ch/doi/10.81088/ha4g3-7x208",
    "doi": "https://doi.org/10.81088/ha4g3-7x208",
    "self_iiif_manifest": "https://inveniordm.web.cern.ch/api/iiif/record:ha4g3-7x208/manifest",
    "self_iiif_sequence": "https://inveniordm.web.cern.ch/api/iiif/record:ha4g3-7x208/sequence/default",
    "files": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/files",
    "archive": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/files-archive",
    "latest": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/versions/latest",
    "latest_html": "https://inveniordm.web.cern.ch/records/ha4g3-7x208/latest",
    "draft": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft",
    "versions": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/versions",
    "access_links": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/access/links",
    "reserve_doi": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/draft/pids/doi",
    "communities": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/communities",
    "communities-suggestions": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/communities-suggestions",
    "requests": "https://inveniordm.web.cern.ch/api/records/ha4g3-7x208/requests"
  },
}

Conclusion

You have now completed the full sequence of creating a draft, uploading a file, and publishing a record in InvenioRDM using cURL. You can read individual entries for each entity to learn more about the available fields and options.

Happy uploading! 🎉