{"id":13848292,"url":"https://github.com/discoverygarden/islandora_rest","last_synced_at":"2025-07-12T12:30:40.549Z","repository":{"id":9462430,"uuid":"11344790","full_name":"discoverygarden/islandora_rest","owner":"discoverygarden","description":"A very basic REST interface for islandora. It allows for the manipulation of objects, data-streams, and relationships. Only supports JSON.","archived":false,"fork":true,"pushed_at":"2022-10-12T16:05:27.000Z","size":136,"stargazers_count":5,"open_issues_count":1,"forks_count":13,"subscribers_count":31,"default_branch":"7.x","last_synced_at":"2024-08-05T19:35:30.676Z","etag":null,"topics":["drupal-7","tool"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"nigelgbanks/islandora_rest","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/discoverygarden.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-07-11T14:57:57.000Z","updated_at":"2022-10-12T16:05:33.000Z","dependencies_parsed_at":"2023-01-16T19:45:21.885Z","dependency_job_id":null,"html_url":"https://github.com/discoverygarden/islandora_rest","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discoverygarden%2Fislandora_rest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discoverygarden%2Fislandora_rest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discoverygarden%2Fislandora_rest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/discoverygarden%2Fislandora_rest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/discoverygarden","download_url":"https://codeload.github.com/discoverygarden/islandora_rest/tar.gz/refs/heads/7.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225820302,"owners_count":17529138,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["drupal-7","tool"],"created_at":"2024-08-04T19:00:46.319Z","updated_at":"2024-11-21T23:31:11.764Z","avatar_url":"https://github.com/discoverygarden.png","language":"PHP","funding_links":[],"categories":["The Islandora 7.x-1.x List"],"sub_categories":["Utility Modules"],"readme":"BUILD STATUS\n------------\nCurrent build status:\n[![Build Status](https://travis-ci.org/discoverygarden/islandora_rest.png?branch=7.x)](https://travis-ci.org/discoverygarden/islandora_rest)\n\nCONTENTS OF THIS FILE\n---------------------\n\n * [Summary](#summary)\n * [Requirements](#requirements)\n * [Installation](#installation)\n * [Configuration](#configuration)\n * [Documentation](#documentation)\n   * [Authorization](#authorization)\n   * [Describe An Existing Object](#describe-an-existing-object)\n   * [Create A New Object](#create-a-new-object)\n   * [Modify An Existing Objects Properties](#modify-an-existing-objects-properties)\n   * [Delete An Existing Object](#delete-an-existing-object)\n   * [Search For Objects](#search-for-objects)\n   * [List Existing Relationships](#list-existing-relationships)\n   * [Add A New Relationship](#add-a-new-relationship)\n   * [Remove An Existing Relationship](#remove-an-existing-relationship)\n   * [Describe A Existing Datastream](#describe-a-existing-datastream)\n   * [Create A New Datastream](#create-a-new-datastream)\n   * [Modify An Existing Datastreams Properties And Content](#modify-an-existing-datastreams-properties-and-content)\n   * [Delete An Existing Datastream](#delete-an-existing-datastream)\n   * [Permission Mappings](#permission-mappings)\n * [Todo](#todo)\n\nSUMMARY\n-------\nThis module provides a number of REST end points for fetching/manipulating\nobjects, datastreams, and object relationships from islandora.\n\nThe basic structure of the module is such that we define Drupal Menu’s for each\nresource type. Currently the resources are __objects__, __datastreams__,\n__relationships__, and __solr__. Each Menu defines a callback that generates the\nHTTP responses for any HTTP Methods requested of the given resource\n__GET__, __PUT__, __POST__, __DELETE__.\n\nThis callback will load a file dedicated to the particular resource located in\nincludes folder and call a function associated with the HTTP method.\n\nSo for example if I make a __GET__ request for an __object__, it will auto load\nthe includes/object.inc file and call a function mapped to the GET method:\n\n```PHP\nfunction islandora_rest_object_get_response(array $parameters) { ... }\n```\n\nIf it were a __PUT__ request for an __object__ it would be:\n\n```PHP\nfunction islandora_rest_object_put_response(array $parameters) { ... }\n```\n\nThese functions are responsible for performing any required actions, say\npurge an object, etc. As well as generating a response for the client\nwhich will typically be a JSON response.\n\nREQUIREMENTS\n------------\n\n  * [Islandora](http://github.com/islandora/islandora)\n  * [Islandora SOLR Search](http://github.com/islandora/islandora_solr_search) (Optional)\n\nINSTALLATION\n------------\n\nAssumes the following global XACML polices have been removed from:\n\n$FEDORA_HOME/data/fedora-xacml-policies/repository-policies/default\n\n* deny-inactive-or-deleted-objects-or-datastreams-if-not-administrator.xml\n* deny-policy-management-if-not-administrator.xml\n* deny-purge-datastream-if-active-or-inactive.xml\n* deny-purge-object-if-active-or-inactive.xml\n\nThis module will still function with those policies in place but the tests this\nmodule defines will fail. Also when installing Islandora don't forget to deploy\nthe policies it includes!\n\n[Islandora SOLR Search](http://github.com/islandora/islandora_solr_search) is an\noptional dependancy that will allow you to perform SOLR searches via this REST\nAPI. Follow the directions it provides if you wish to enable SOLR searches.\n\nCONFIGURATION\n-------------\n\nFor each of the REST end-points defined below in the documentation section there\nexists a corresponding Drupal Permission (with the exception of SOLR which uses\nthe permissions defined by the Islandora SOLR Search module).\n\n\nAfter enabling this module navigate to www.yoursite.com/admin/people/permissions\nand enable the features you want to expose. Note that XACML is still enforced on\nall REST end-points and access can still be denied regardless of what Drupal\nPermissions are enabled.\n\nDOCUMENTATION\n-------------\n\nIn an effort to simplify the __datastream__ REST end-point multi-part responses\nfor __GET__ requests were investigated. With the intention of returning both\nthe content and properties through a single request. While this is possible it\nis not well supported by jQuery, there exists a\n[plug-in](http://archive.plugins.jquery.com/project/mpAjax), I am unsure if this\nplugin works with all browsers. To get around this issue __GET__ requests for a\n__datastream__ can return either the content or properties but not both for the\nmoment.\n\n\nAlso since __PUT__ / __DELETE__ support is lacking in IE6-9, we've provided the\nability to mock __PUT__ / __DELETE__ requests as __POST__ requests by adding an\nadditional form-data field **method** to inform the server which method was\nactually intended.\n\n\nAt the moment multi-part __PUT__ requests such as the one required to modify an\nexisting __datastream's__ content and properties are **not implemented** you\ncan mock these __PUT__ requests using aforementioned mechanism. __POST__ and\ninclude an additional form-data field **method** with the value __PUT__.\n\n\nAdding support for multi-part __PUT__ requests is possible but would require\nwriting or using and HTTP Request parsing library as __PUT__ is not well\nsupported in __PHP__.\n\nSince we don't have an HTTP Request parsing library __PUT__ requests are\nexpecting raw **application/json** content as the request body.\n\n### Authorization\n\nIn its most common use case - JavaScript executing AJAX callbacks inside module\ncode - no authorization is needed. For external requests, however, an additional\nstep is required.\n\nDrupal doesn't support basic authorization out of the box; any script or other\nsuch code that needs authentication to hit the various REST endpoints should\nfirst make a POST request to the site login page and then maintain cookies for\nfuture requests.\n\nFor example, using cURL on a UNIX-like system, and replacing `USERNAME`,\n`PASSWORD`, and `SITE_URL` with those respective items:\n```bash\ncurl --cookie-jar ./cookies.txt -X POST -H \"Content-Type: multipart/form-data\" -F \"name=USERNAME\" -F \"pass=PASSWORD\" -F \"form_id=user_login\" -F \"op=Log in\" \"http://SITE_URL/user/login\"\n```\n\nIn this case:\n* `name` and `pass` represent the login credentials\n* `form_id` represents the machine name of the form being POSTed to\n* `op` represents the element on the page being used to execute the POST\n\nThe stored session data in cookies.txt could then be used for future cURL\nrequests to the API.\n\nOf course, a more comprehensive solution is almost certainly desirable so that\npasswords are not stored in history - Bash or otherwise - but the same\nprinciples apply.\n\nAlternatively the [islandora_rest_api_auth](https://github.com/discoverygarden/islandora_rest/tree/7.x/modules/islandora_rest_api_auth)\nsubmodule exists which can allow for token based user authentication instead.\n\n### Documentation Key\n{variable} Required Parameter.\n\n[variable] Optional Parameter no default defined, NULL or empty string likely be\nused.\n\n[variable, ’default’] Optional Parameter and it’s default.\n\n### Common Responses\nUnless otherwise specified each end-point can return the following responses.\n\n#### Response: 400 Bad Request\n##### Content-Type: application/json\n|Name   |Description                              |\n|-------|-----------------------------------------|\n|message|A message saying the request was invalid.|\n\n400 errors will be triggered by invalid information being provided to a query.\nIn these cases, the request should not be repeated, but rather fixed before\nanother request is made.\n\n#### Response: 401 Unauthorized\n##### No response body.\nIn general 401 means an anonymous user attempted some action and was denied.\nEither the action is not granted to anonymous uses in the Drupal permissions,\nor XACML denied the action for the anonymous user.\n\n#### Response: 403 Forbidden\n##### No response body.\nIn general 403 means an authenticated user attempted some action and was denied.\nEither the authenticated user does not have a Drupal role that grants him/her\npermission to perform that action, or XACML denied the action for that user.\n\n#### Response: 404 Not Found\n##### No response body.\nIn general a 404 will occur, when a user tries to perform an action on a\nobject or datastream that doesn't not exist. Or XACML is hiding that\nobject or datastream from the user.\n\n404 Responses can be returned even if the user was **not** determined to have\npermission to perform the requested action, as the resource must be first\nfetched from fedora before the users permission can be determined.\n\n#### Response: 500 Internal Server Error\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| message       | A detail description of the error.\n\nAny problem can trigger a 500 error, but in general you'll find that this is\ntypically an error returned by Fedora.\n\n## Describe An Existing Object\n\n#### URL syntax\nislandora/rest/v1/object/{pid}\n\n#### HTTP Method\nGET\n\n#### Headers\nAccept: application/json\n\n#### Get Parameters\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object\n\n#### Response: 200 OK\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the requested object\n| label         | The object’s label\n| models        | An array of the objects models.\n| state         | Object’s state, either “A”, “I”, “D”\n| owner         | The objects owner\n| created       | Created date of the object, yyyy-MM-ddTHH:mm:ssZ\n| modified      | Last modified date of the object, yyyy-MM-ddTHH:mm:ssZ\n| datastreams   | Any array of objects each describing a data stream. See GET datastream for more details.\n\n#### Example Response\n```JSON\n{\n \"pid\": \"islandora:root\",\n \"label\": \"Root Object\",\n \"owner\": \"fedoraAdmin\",\n \"models\": [\"islandora:collectionCModel\"],\n \"state\": \"A\",\n \"created\": \"2013-05-27T09:53:39.286Z\",\n \"modified\": \"2013-06-24T04:20:26.190Z\",\n \"datastreams\": [{\n   \"dsid\": \"RELS-EXT\",\n   \"label\": \"Fedora Object to Object Relationship Metadata.\",\n   \"state\": \"A\",\n   \"size\": 1173,\n   \"mimeType\": \"application\\/rdf+xml\",\n   \"controlGroup\": \"X\",\n   \"created\": \"2013-06-23T07:28:32.787Z\",\n   \"versionable\": true,\n   \"versions\": []\n }]\n}\n```\n\n## Create A New Object\n\n#### URL syntax\nislandora/rest/v1/object\n\n#### HTTP Method\nPOST\n\n#### Headers\nAccept: application/json\n\n#### POST (form-data)\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object, if not given the namespace will be used to create a new one (optional).\n| label         | The label of the new object (optional).\n| owner         | The owner of the new object, if not given it will be the currently logged in (optional).\n| namespace     | Used to create a PID for a new empty object if pid is not given (optional).\n\n#### Response: 201 Created\n##### Content-Type: application/json\nReturns the same response as a [GET Object](#response-200-ok) request.\n\n## Modify An Existing Object’S Properties\n\n#### URL syntax\nislandora/rest/v1/object/{pid}\n\n#### HTTP Method\nPUT\n\n#### Headers\nAccept: application/json\n\nContent-Type: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object, if not given the namespace will be used to create a new one.\n\n#### Request Body (raw)\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| label         | The new label of the object (optional)\n| owner         | The new owner of the object (optional)\n| state         | The new state of the object, either “A”, “I”, “D” (optional)\n\nOnly given variables will change the object the others will retain their\noriginal values.\n\n#### Response: 200 OK\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the requested object\n| label         | The object’s label\n| state         | Object’s state, either “A”, “I”, “D”\n| owner         | The objects owner\n| modified      | Last modified date of the object, yyyy-MM-ddTHH:mm:ssZ\n\n## Delete An Existing Object\n\n#### URL syntax\nislandora/rest/v1/object/{pid}\n\n#### HTTP Method\nDELETE\n\n##### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object.\n\n#### Response: 200 OK\n##### No response body.\n\n## List Existing Relationships\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/relationship?[predicate][uri][object][literal, false]\n\n#### HTTP Method\nGET\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object.\n| predicate     | The predicate to limit the results to. (optional)\n| uri           | The uri of the predicate, required if predicate is present.\n| object        | The object to limit the results to. (optional)\n| literal       | True if the object is literal, false otherwise. Defaults to false. (optional)\n\n#### Response: 200 OK\n##### Content-Type: application/json\nA JSON **array** with each field containing the following values.\n\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| predicate     |  object that describes the predicate\n| object        |  An object that describes the object.\n\n#### Example Response\n\n```JSON\n[{\n  \"predicate\": {\n    \"value\": \"hasModel\",\n    \"alias\": \"fedora-model\",\n    \"namespace\": \"info:fedora/fedora-system:def/model#\"\n  },\n  \"object\": {\n    \"literal\": false,\n    \"value\": \"islandora:collectionCModel\"\n  }\n}]\n```\n\n## Add A New Relationship\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/relationship\n\n#### HTTP Method\nPOST\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object.\n\n#### Post (form-data)\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| uri           | The predicate URI for the given predicate.\n| predicate     | The predicate of the relationship.\n| object        | Object of the relationship.\n| type          | The type of the relationship object. Can be either 'uri', 'string', 'int', 'date', 'none'. Defaults to 'uri'.\n\n#### Response: 201 Created\n##### No response body.\n\n## Remove An Existing Relationship\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/relationship\n\n#### HTTP Method\nDELETE\n\n#### Headers\nContent-Type: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object.\n\n#### Request Body (raw)\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| uri           | The uri of the predicate, required if predicate is present.\n| predicate     | The predicate to limit the remove to (optional)\n| object        | The object to limit the remove to (optional)\n| literal       | True if the object is literal, false otherwise. Defaults to false (optional)\n\n#### Response: 200 Ok\n##### No response body.\n\n## Describe A Existing Datastream\n#### URL syntax\nislandora/rest/v1/object/{pid}/datastream/{dsid}?[content, true][version]\n\n#### HTTP Method\nGET\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object\n| dsid          | Data stream Identifier.\n| content       | True to return the datastream’s content, False to return it’s properties.\n| version       | The version of the datastream to return, identified by its created date of the datastream in ISO 8601 format yyyy-MM-ddTHH:mm:ssZ (optional) If not given the latest version of the data stream will be returned.\n\n#### Response: 200 OK\n##### Content-Type: application/json\nIf content is false these properties are returned. When requesting a specific\nversion of the data stream, these values are limited to a subset described here.\n\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| dsid          | The datastream's persistent identifier\n| label         | The datastream's label\n| size          | The datastream's size in bytes\n| state         | The datastream’s state, either “A”, “I”, “D”\n| mimeType      | The datastream’s MIME Type\n| controlGroup  | The datastream's control group, either X, M, E, R\n| versionable   | A boolean value if the datastream is versionable\n| created       | Created date of the datastream, yyyy-MM-ddTHH:mm:ssZ\n| checksumType  | The checksum type, e.g., SHA-1, MD5. Value is \"DISABLED\" if checksums are not enabled for the datastream.\n| checksum      | The checksum value. Value is \"none\" if no checksum is available.\n| versions      | Any array of objects each describing each datastream version not including the latest, contains a subset of the fields described here.\n\n#### Example Response\n```JSON\n{\n  \"dsid\": \"RELS-EXT\",\n  \"label\": \"Fedora Object to Object Relationship Metadata.\",\n  \"state\": \"A\",\n  \"size\": 1173,\n  \"mimeType\": \"application\\/rdf+xml\",\n  \"controlGroup\": \"X\",\n  \"created\": \"2013-06-23T07:28:32.787Z\",\n  \"checksumType\": \"SHA-1\",\n  \"checksum\": \"46dbb3122dc1a140a5f344934251d7c1f680ff28\",\n  \"versionable\": true,\n  \"versions\": [{\n    \"label\": \"Old Label.\",\n    \"state\": \"A\",\n    \"size\": \"1000\",\n    \"mimeType\": \"application\\/rdf+xml\",\n    \"controlGroup\": \"X\",\n    \"created\": \"2013-05-23T06:26:32.787Z\"\n  }]\n}\n```\nIf content is true the datastream’s content is returned, and the appropriate\ncontent-type will be set by the server for the datastream’s content.\n\n## Create A New Datastream\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/datastream\n\n#### HTTP Method\nPOST\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object to add the datastream to.\n\n#### Post (form-data)\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| dsid          | The new datastream's persistent identifier\n| label         | The new datastream's label (optional)\n| state         | The new datastream’s state, either “A”, “I”, “D” (optional) Defaults to “A”\n| mimeType      | The new datastream’s MIME Type (optional) if not provided then it is guessed from the uploaded file.\n| checksumType  | The new datastream’s checksum type (optional), e.g.,  SHA-1, MD5. Defaults to 'DISABLED'.\n| controlGroup  | The new datastream's control group, either X, M, E, R\n| versionable   | A boolean value if the datastream is versionable (optional) Defaults to true\n| multipart file as request content | File to use as the datastream’s content\n\n#### Response: 201 Created\n##### Content-Type: application/json\nReturns the same response as a [GET Datastream](#response-200-ok-5) request.\n\n## Modify An Existing Datastreams Properties And Content\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/datastream/{dsid}\n\n#### HTTP Method\nPUT\n\n#### Headers\nAccept: application/json\n\nContent-Type: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object to add the datastream to.\n| dsid          | The persistent datastream identifier.\n\n#### Request Body (raw)\n##### Content-Type: application/json\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| label         | The datastream's new label (optional)\n| state         | The datastream’s new state, either “A”, “I”, “D” (optional)\n| mimeType      | The new datastream’s MIME Type (optional) if not provided then it is guessed from the uploaded file.\n| checksumType  | The datastream’s checksum type (optional), e.g.,  SHA-1, MD5. Defaults to 'DISABLED'.\n| versionable   | A boolean value if the datastream is versionable (optional) Defaults to true\n| multipart file as request content | File to replace existing datastream (for Managed datastreams)\n\n#### Response: 200 Ok\n##### Content-Type: application/json\nReturns the same response as a [GET Datastream](#response-200-ok-5) request.\n\n## Delete An Existing Datastream\n\n#### URL syntax\nislandora/rest/v1/object/{pid}/datastream/{dsid}\n\n#### HTTP Method\nDELETE\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| pid           | Persistent identifier of the object, if not given the namespace will be used to create a new one.\n| dsid          | Data stream Identifier.\n\n#### Response: 200 OK\n##### No response body.\n\n## Search For Objects\nThis is a light wrapper for the SOLR own end point. It incorporates XACML alters\nto restrict the search results for the given user. The Islandora Solr Search\n'Search the Solr index' permission is used for authentication instead of any\ncustom permissions from this module.\n\nBecause parameters are passed through to Solr carte blanche, invalid requests\nmay trigger 400 errors. `Apache_Solr_Service` does not provide details about the\nerror in these cases, so a generic message is given.\n\n#### URL syntax\nislandora/rest/v1/solr/{query}\n\n#### HTTP Method\nGET\n\n#### Headers\nAccept: application/json\n\n#### Get Variables\n| Name          | Description                                                  |\n| ------------- | ------------------------------------------------------------ |\n| query         | The SOLR query to execute.\n| ...           | See the SOLR documentation for the additional parameters it can take.\n\n#### Response: 200 OK\n##### Content-Type: application/json\nThe result will be unmodified server side since all the query types support the\nreturn of JSON directly to the user. So this will more or less just delegate to\nthose respective end points. See the documentation for SOLR for more info.\n\n## Permission Mappings\n\n### Islandora Core Permissions mapping\nTo ensure all object restrictions are respected on Islandora REST requests, core islandora permissions are mapped in\nthe following way:\n\n#### Islandora Rest and Islandora Core permissions mapping\n| Rest Permission Name                     | Islandora Core Permission                                    |\n| ---------------------------------------- | ------------------------------------------------------------ |\n| ISLANDORA_REST_OBJECT_GET_PERM           | ISLANDORA_VIEW_OBJECTS\n| ISLANDORA_REST_OBJECT_PUT_PERM           | ISLANDORA_MANAGE_PROPERTIES\n| ISLANDORA_REST_OBJECT_POST_PERM          | ISLANDORA_INGEST\n| ISLANDORA_REST_OBJECT_DELETE_PERM        | ISLANDORA_PURGE\n| ISLANDORA_REST_DATASTREAM_GET_PERM       | ISLANDORA_VIEW_OBJECTS\n| ISLANDORA_REST_DATASTREAM_PUT_PERM       | ISLANDORA_METADATA_EDIT\n| ISLANDORA_REST_DATASTREAM_POST_PERM      | ISLANDORA_ADD_DS\n| ISLANDORA_REST_DATASTREAM_DELETE_PERM    | ISLANDORA_PURGE\n| ISLANDORA_REST_DATASTREAM_TOKEN_GET_PERM | ISLANDORA_VIEW_OBJECTS\n| ISLANDORA_REST_RELATIONSHIP_GET_PERM     | ISLANDORA_VIEW_OBJECTS\n| ISLANDORA_REST_RELATIONSHIP_POST_PERM    | ISLANDORA_METADATA_EDIT\n| ISLANDORA_REST_RELATIONSHIP_DELETE_PERM  | ISLANDORA_PURGE\n\n## License\n\n[GPLv3](http://www.gnu.org/licenses/gpl-3.0.txt)\n\n## Related Projects / Client Libraries\n\n* [mjordan/irc](https://github.com/mjordan/irc): PHP/Guzzle library for creating Islandora REST clients\n  * [SFULibrary/islandora_rest_ingester](https://github.com/SFULibrary/islandora_rest_ingester) CLI Ingestor using the above\n* [kulibraries/islandora7-rest](https://github.com/kulibraries/islandora7-rest) Python client library for Islandora REST\n\nTODO\n----\n- [ ] Update Solution Packs to use datastream ingested/modified hooks rather\n      than object ingested hooks.\n- [ ] Move DC transform logic out of XML Forms and have it use ingested/modified\n      hooks instead.\n- [ ] Add support for purging previous versions of datastreams\n- [x] Add checksum support to datastream end-points.\n- [ ] Add describe json end-point for the repository.\n- [ ] Make PUT requests support multi-part form data, populate $_FILES.\n- [ ] Investigate a making a jQuery plugin to ease interaction with REST API?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscoverygarden%2Fislandora_rest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiscoverygarden%2Fislandora_rest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscoverygarden%2Fislandora_rest/lists"}