Die REST-API kann vor allem durch externe Tools für den lesenden und schreibenden Zugriff auf MyCoRe-Objekte benutzt werden.
    Mit dem LTS 2020.06 wurde die MyCoRe-REST-API überarbeitet.
    Neben dem lesenden Zugriff besteht jetzt auch die Möglichkeit Objekte zu erstellen, bearbeiten und zu löschen.
    Die Basis-URL der neuen REST-API lautet: ${WebApplicationBaseURL}api/v2.
  
Mit dem LTS 2021.06 wurden Zugriffsschlüssel in mycore-acl eingeführt. Zugriffsschlüssel können grundsätzlich nur im JSON-Format verwaltet werden.
Neben der Beschreibung auf dieser Webseite, liefert jede MyCoRe-Anwendung auch eine Dokumentation der REST-Schnittstelle im OpenAPI-Format aus: z.B.: https://www.mycore.de/mir/api/v2/openapi.json.
Die Nutzung der REST-API wird durch ACLs geschützt.
     Für den lesenden Zugriff muss immer eine ACL auf restapi:/
     mit dem Recht read gesetzt sein.
     Der Zugriff auf einzelne Pfade wie /objects, /search oder
     /classifications kann durch entsprechende ACLs (z.B. restapi:/v2/objects) 
     zusätzlich beschränkt werden.
   
     Für den schreibenden Zugriff muss eine eine ACL auf restapi:/
     mit dem Recht writedb gesetzt sein.
   
Durch Setzen entsprechender ACL-Regeln kann der Zugriff komplett freigeschaltet (TRUE), 
      auf einzelne Nutzer oder Rollen beschränkt oder auf bestimmte IP-Adressen / IP-Bereiche begrenzt werden.
Dieser Request liefert eine Liste der vorhandenen MyCoRe-Objekte zurück.
Die Liste kann im XML-Format (default) oder JSON-Format zurückgeliefert werden.
      Das Format kann entweder via HTTP-Header (Accept: application/json bzw. Accept: application/xml)
      oder via URL-Endung (/objects.json bzw. /objects.xml) definiert werden.
   
Dieser Request liefert die internen XML-Metadaten eines MyCoRe-Objektes zurück.
| {$id} | entspricht im Standardfall der MyCoRe-Objekt-ID. Führende Nullen werden ggf. automatisch ergänzt. Anstelle der ID können alternative Identifier verwenden werden. Voraussetzung dafür ist, dass sie als SOLR-Feld definiert wurden, dass genau ein Dokument zurückliefert. Über das Property MCR.RestAPI.V2.AlternativeIdentifier.Objects.Keyskann eine Liste von Feldern angegeben werden:key:valueverwendet werden. | 
| Parameter | Beschreibung | 
|---|---|
| offset | Überspringt die angegebene Anzahl an Ergebnissen. Hinweis: Nicht zusammen mit after_id verwenden. | 
| limit | Begrenzt die Anzahl der zurückgegebenen Ergebnisse. | 
| type | Filtert Objekte nach dem Typ in der ID. | 
| project | Filtert Objekte nach dem Projekt in der ID. | 
| number_greater | Nur Objekte mit einer ID, deren Nummer größer ist als der angegebene Wert. | 
| number_less | Nur Objekte mit einer ID, deren Nummer kleiner ist als der angegebene Wert. | 
| created_after / created_before | Filtert nach Objekten, die nach/vor einem bestimmten Datum erstellt wurden. | 
| modified_after / modified_before | Filtert nach Objekten, die nach/vor einem bestimmten Datum zuletzt bearbeitet wurden. | 
| deleted_after / deleted_before | Filtert nach Objekten, die nach/vor einem bestimmten Datum gelöscht wurden. | 
| created_by / modified_by / deleted_by | Filtert nach Objekten, die von einem bestimmten Benutzer erstellt, bearbeitet oder gelöscht wurden. | 
| sort_order | Gibt die Sortierreihenfolge an (asc für aufsteigend, desc für absteigend). | 
| sort_by | Sortiert nach id, created (Standard) oder modified. | 
| after_id | Gibt Ergebnisse nach einer bestimmten ID zurück. Hinweis: Nicht zusammen mit offset verwenden. | 
        Die Datumsangaben für die Parameter created_after, created_before, modified_after, modified_before, deleted_after und deleted_before verwenden das HTTP-Datumsformat.
        Ein Beispiel für eine gültige Angabe ist: Tue, 27 Aug 2024 09:16:02 GMT.
    
 curl -o skeleton_simpledoc_00000036.xml
  http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000036Dieser Request liefert die <metadata>-Sektion eines MyCoRe-Objektes zurück.
| {$id} | entspricht im Standardfall der MyCoRe-Objekt-ID. Führende Nullen werden ggf. automatisch ergänzt. Anstelle der ID können alternative Identifier verwenden werden (s. oben). | 
 curl -o metadata-for-skeleton_simpledoc_00000036.xml 
  http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000036/metadataerstellt ein neues MyCoRe-Objekt.
Im Request-Body muss ein valides MyCoRe-Objekt mitgeliefert werden.
     Aus der MyCoRe-ID werden Projekt und Objekttyp übernommen, der Zählerbestandteil wird vom System mit dem aktuellen Wert überschrieben.
     Der Response enthält einen Location-Header mit der URL des neuen MyCoRe-Objektes.
     
curl -D -X POST -u administrator:*PASSWORD*  
-H "Content-Type: application/xml" 
-d "@skeleton_simpledoc_00000001.xml" 
- http://localhost:8080/skeleton/api/v2/objects<mycoreobject ID="skeleton_simpledoc_00000001">
  <structure />
  <metadata>
    <def.title class="MCRMetaLangText" heritable="false" notinherit="true">
      <title inherited="0" form="plain">Meine erste Publikation</title>
    </def.title>
    <def.language class="MCRMetaClassification" heritable="false" notinherit="true">
      <language inherited="0" classid="rfc4646" categid="en"/>
    </def.language>
  </metadata>
  <service>
    <servstates class="MCRMetaClassification">
      <servstate inherited="0" classid="state" categid="submitted"/>
    </servstates>
  </service>
</mycoreobject>
            Daten für Upload: MyCoRe-Objekt als XML in Datei skeleton_simpledoc_00000001.xml
aktualisiert die internen XML-Metadaten eines MyCoRe-Objektes.
curl -D - -X PUT -u administrator:*PASSWORD*  
-H "Content-Type: application/xml" 
-d "@skeleton_simpledoc_00000036.xml" 
http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000036
aktualisiert die <metadata>-Sektion eines MyCoRe-Objektes.
curl -D - -X PUT -u administrator:*PASSWORD*  
-H "Content-Type: application/xml" 
-d "@metadata-for-skeleton_simpledoc_00000001.xml" 
http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_000000001/metadata  <metadata>
    <def.title class="MCRMetaLangText" heritable="false" notinherit="true">
      <title inherited="0" form="plain">Meine aktualisierte Publikation</title>
    </def.title>
    <def.language class="MCRMetaClassification" heritable="false" notinherit="true">
      <language inherited="0" classid="rfc4646" categid="en"/>
    </def.language>
  </metadata>
            Daten für Upload: Metadaten als XML-Datei metata-for-skeleton_simpledoc_00000001.xml
Dieser Request liefert eine Liste aller Zugriffsschlüssel eines MyCoRe-Objekts zurück.
| {$id} | analog zu /objects/{$id} | 
| {$offset} | optional: Legt das Offset der Liste der zuletzt verwalteten Zugriffsschlüssel fest. Default: 0. | 
| {$limit} | optional: Legt die Größe der Liste der zuletzt verwalteten Zugriffsschlüssel fest. Default: 128. | 
Die Liste wird im JSON-Format zurückgeliefert.
Dieser Request liefert einen Zugriffsschlüssel eines MyCoRe-Objekts zurück.
| {$id} | analog zu /objects/{$id} | 
| {$secret} | Geheimnis des Zugriffsschlüssels. | 
| {$secret_encoding} | optional: Beschreibt die Codierung von {$secret_format}. Dabei wirdbase64urlals Format unterstützt. | 
Der Zugriffsschlüssel wird im JSON-Format zurückgeliefert.
      Dieser Request erstellt einen Zugriffsschlüssel für ein MyCoRe-Objekt.
      Der Zugriffsschlüssel ist standardmäßig aktiviert. Er kann in den Metadaten über isActive explizit deaktiviert werden.
      Die Response enthält einen Location-Header mit der URL des neuen Zugriffsschlüssels.
    
| {$id} | analog zu /objects/{$id} | 
Der Zugriffsschlüssel muss im JSON-Format gesendet werden.
Dieser Request aktualisiert einen Zugriffsschlüssel für ein MyCoRe-Objekt. Beim Update werden nur Properties berücksichtigt, die in der Anfrage enthalten sind.
| {$id} | analog zu /objects/{$id} | 
| {$secret} | analog zu /objects/{$id}/accesskeys/{$secret} | 
| {$secret_encoding} | analog zu /objects/{$id}/accesskeys/{$secret} | 
Der Zugriffsschlüssel muss im JSON-Format gesendet werden.
Dieser Request löscht einen Zugriffsschlüssel eines MyCoRe-Objekts.
| {$id} | analog zu /objects/{$id} | 
| {$secret} | analog zu /objects/{$id}/accesskeys/{$secret} | 
| {$secret_encoding} | analog zu /objects/{$id}/accesskeys/{$secret} | 
 MCR.RestApi.Draft.MCRObjectState=true
      Dieser Request liefert den Wert der state-Klassifikation im <service>-Teil des MyCoRe-Objektes zurück.
    
      Es wird ein Redirect auf den API-Endpoint /classifications mit der dazugehörigen Kategorie ausgeführt.
    
      Dieser Request setzt die state-Klassifikation im <service>-Teil des MyCoRe-Objektes.
    
Der Wert wird als Plain-Text im Body des Requests übergeben.
curl -D - -X PUT -u administrator:*PASSWORD*  
  -H "Content-Type: text/plain" 
  -d "deleted" 
  - http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000012/service/state
listet die Derivate eines MyCoRe-Objektes auf.
| {$id} | analog zu /objects/{$id} | 
Die Liste kann im XML-Format (default) oder JSON-Format zurückgeliefert werden.
        Das Format kann entweder via HTTP-Header (Accept: application/json bzw. Accept: application/xml)
        oder via URL-Endung (/derivates.json bzw. /derivates.xml) definiert werden.
      
curl -H "Accept: application/json" 
     https://www.mycore.de/mir/api/v2/objects/mir_mods_00000003/derivatesDieser Request liefert das interne XML eines MyCoRe-Derivates zurück
| {$id} | analog zu /objects/{$id} | 
| {$derid} | entspricht im Standardfall der MyCoRe-Derivate-ID. Führende Nullen werden ggf. automatisch ergänzt. Anstelle der ID können alternative Identifier verwenden werden. Voraussetzung dafür ist, dass sie als SOLR-Feld definiert wurden, dass genau ein Dokument zurückliefert. Über das Property MCR.RestAPI.V2.AlternativeIdentifier.Derivates.Keyskann eine Liste von Feldern angegeben werden:key:valueverwendet werden. | 
Mit diesem Request erhält man ein Directory-Listing für im Derivate enthaltene Ordner oder lädt die spezifizierte Datei herunter.
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
| {$path} | optional: Pfad zu einem Verzeichnis im Derivate, dessen Inhalt hier ausgegeben werden soll bzw. zu einer Datei die heruntergeladen werden soll. | 
Die Liste kann im XML-Format (default) oder JSON-Format zurückgeliefert werden.
            Das Format kann entweder via HTTP-Header (Accept: application/json bzw. Accept: application/xml)
            oder via URL-Endung (/contents.json bzw. /contents.xml) definiert werden.
        
Hinweis: Datei-Downloads sind auch über die File-API realisierbar:
erstellt ein neues MyCoRe-Derivate.
Die initialen Metadaten werden als Form-Parameter übergeben.
        Der Response enthält einen Location-Header mit der URL des neuen MyCoRe-Objektes.
      
| order | Reihenfolge (Position) des Derivates in den MyCoRe-Metadaten | 
| maindoc | Pfad zur Hauptdatei im Derivate | 
| classification | (wiederholbar) Klassifikationseinträge für das Derivate in der Form classid:categid | 
| title | (wiederholbar) Title des Derivates, die Sprache kann dem Text in runden Klammern vorangestellt werden, z.B. (en)published article | 
curl -D - -X POST -u administrator:*PASSWORD*
-H "Content-Type: application/x-www-form-urlencoded" 
-d "order=1&maindoc=index.html&title=%28de%29Volltextdokument&title=%28en%29fulltext%20document&classification=derivate_types%3Acontent"
http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000012/derivateslädt eine neue Datei hoch bzw. aktualisiert eine existierende Datei.
Der Response hat den Statuscode 201, wenn eine neue Datei erstellt wurde
 
         oder den Statuscode 204, wenn eine bestehende Datei aktualisiert wurde.
     
curl -D - -X PUT -u administrator:*PASSWORD*  
-H "Content-Type: application/pdf" 
--data-binary "@fulltext.pdf"
- http://localhost:8080/skeleton/api/v2/objects/skeleton_simpledoc_00000012/derivates/skeleton_derivate_00000032/contents/fulltext.pdf
Dieser Request liefert eine Liste aller Zugriffsschlüssel eines MyCoRe-Derivats zurück.
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
| {$offset} | analog zu /objects/{$id}/accesskeys | 
| {$limit} | analog zu /objects/{$id}/accesskeys | 
Die Liste wird im JSON-Format zurückgeliefert.
Dieser Request liefert einen Zugriffsschlüssel eines MyCoRe-Derivats zurück.
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
| {$secret} | analog zu /objects/{$id}/accesskeys/{$secret} | 
| {$secret_encoding} | analog zu /objects/{$id}/accesskeys/{$secret} | 
Der Zugriffsschlüssel wird im JSON-Format zurückgeliefert.
      Dieser Request erstellt einen Zugriffsschlüssel für ein MyCoRe-Derivat.
      Der Zugriffsschlüssel ist default aktiviert, wenn dieser über isActive nicht explizit deaktiviert wurde.
      Die Response enthält einen Location-Header mit der URL des neuen Zugriffsschlüssels.
    
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
Der Zugriffsschlüssel muss im JSON-Format gesendet werden.
Dieser Request aktualisiert einen Zugriffsschlüssel für ein MyCoRe-Derivat. Beim Update werden nur Properties berücksichtigt, die in der Anfrage enthalten sind.
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
| {$secret} | analog zu /objects/{$id}/accesskeys/{$secret} | 
| {$secret_encoding} | analog zu /objects/{$id}/accesskeys/{$secret} | 
Der Zugriffsschlüssel muss im JSON-Format gesendet werden.
Dieser Request löscht einen Zugriffsschlüssel eines MyCoRe-Derivats.
| {$id} | analog zu /objects/{$id} | 
| {$derid} | analog zu /objects/{$id}/derivates/{$derid} | 
| {$secret} | analog zu /objects/{$id}/accesskeys/{$secret} | 
| {$secret_encoding} | analog zu /objects/{$id}/accesskeys/{$secret} | 
Dieser Request listet alle in der Anwendung installierten Klassifikationen auf.
Die Liste kann im XML-Format (default) oder JSON-Format zurückgeliefert werden.
            Das Format kann entweder via HTTP-Header (Accept: application/json bzw. Accept: application/xml)
            oder via URL-Endung (/classifications.xml bzw. /classifications.json) definiert werden.
        
Dieser Request zeigt eine Klassifikation aus der MyCoRe-Anwendung an.
| {$classid} | entspricht der ID einer Klassifikation | 
Die Liste kann im XML-Format (default) oder JSON-Format zurückgeliefert werden.
            Das Format kann entweder via HTTP-Header (Accept: application/json bzw. Accept: application/xml)
            oder via URL-Endung (/{$classid}.json bzw. /{$classid}.xml) definiert werden.
        
@MCRApiDraft
     Eventuell gibt es REST-Klasse/Methoden, die im Zuge der Entwicklung noch nicht stabil für den produktiven Einsatz sind.
     Jene können deshalb mit MCRApiDraft sowie einem Wert annotiert werden und damit explizit de- oder aktiviert werden.
     
     Beispielsweise wird hier die Klasse MCRRestObjects mit dem Wert MCRObjects annotiert:
   
|  |  | 
     Standardmäßig ist eine annotierte Klasse/Methode deaktiviert.
     Um eine annotierte Klasse/Methode zu aktiveren, muss die Konfiguration wie folgt um eine MyCoRe-Property mit dem Namen MCR.RestApi.Draft.<Wert> und true als Wert erweitert werden:
   
|  |  | 
     Analog kann jene explizit mit false deaktiviert werden.