...
This document will walk you through getting the code, building the webapp, and exercising the REST API.
Prerequisites
Fedora 4 requires Java 7 8 and Maven 3 (only for building the project). Check that you have them installed before proceeding:
...
And build the project (the first time you build Fedora 4 may take some time and bandwidth to download all the development dependencies):
Code Block |
---|
$ MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=256m" mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] fcrepo4 Fedora Commons 4 :: Parent POM [INFO] fcrepo-jcrFedora Commons 4 [INFO] fcrepo-metrics Fedora Repository BOM [INFO] fcrepo-storage-policy Fedora Repository JCR BOM [INFO] fcrepo-kernel Fedora Repository BOMs [INFO] fcrepo-audit [INFO] fcrepo-jmsFedora Repository Kernel API [INFO] fcrepo-serializationFedora Repository Configurations Module [INFO] fcrepo-http-commonsFedora Repository Kernel Implementation (ModeShape) [INFO] fcrepo-http-apiFedora Event Serialization [INFO] fcrepo-generator-dcFedora Repository JMS Module [INFO] fcrepo-webapp [INFO] fcrepo-rss Fedora Repository HTTP Commons Module [INFO] fcrepo-webhooksFedora Repository Authorization Commons Module [INFO] Fedora Repository HTTP API Module [INFO] Fedora Repository WebAC Authorization Module [INFO] Fedora Repository Deployable Web Application [INFO] Fedora Repository LDP integration tests Module [INFO] Fedora Repository RDF integration tests Module [INFO] [INFO] ---- [INFO] ------------------------------------------------------------------------ [INFO] Building Fedora fcrepo4Commons 4 :: Parent POM 5.0.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ fcrepo --- [INFO] Deleting /Volumes/TempStorage/fedora4/fcrepo4/target [INFO] [INFO] --- maven-enforcer-plugin:1.2:enforce (enforce-maven) @ fcrepo --- [INFO] [INFO] --- maven-enforcer-plugin:1.2:enforce (default) @ fcrepo --- [INFO] [INFO] --- jacoco-maven-plugin:0.6.3.201306030806:prepare-agent (pre-unit-test) @ fcrepo --- [....] |
...
The webapp can be run from a bundled instance of jetty. The application will listen on port 8080 by default.
If you would like to run the webapp on a different port, you can add the "jetty.port" option in your maven command (e.g. mvn -Djetty.port=8181 jetty:run)
Code Block |
---|
$ cd fcrepo-webapp $ MAVEN_OPTS="-Xmx512m" mvn jetty:run [...] TRACE 10:50:43.845 (SessionProvider) Returning new InjectableSession... DEBUG 10:50:43.845 (InjectableSession) Initializing an InjectableSession with SessionFactory org.fcrepo.session.SessionFactory@5a3c8525. TRACE 10:50:43.846 (SessionProvider) Returning new InjectableSession... DEBUG 10:50:43.846 (InjectableSession) Initializing an InjectableSession with SessionFactory org.fcrepo.session.SessionFactory@5a3c8525. 2013-07-01 10:50:44.027:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server [INFO] Starting scanner at interval of 2 seconds. |
There's a nice, friendly HTML interface waiting for you at http://localhost:8080/rest/ (the default username and password is fedoraAdmin)
REST API Examples
The REST API documentation provides a full listing of the features and functions of the REST API. Here are some examples to get you started:
Code Block |
---|
$ curl "http://localhost:8080/rest/" -ufedoraAdmin:fedoraAdmin @prefix dcpremis: <http://purlwww.loc.orggov/dcpremis/termsrdf/>v1#> . @prefix nttest: <info:fedora/test/> . @prefix memento: <http://www.jcpmementoweb.org/jcr/nt/1.0>ns#> . @prefix foafrdfs: <http://xmlnswww.w3.comorg/foaf2000/0.1/>01/rdf-schema#> . @prefix testwebac: <info<http://fedora.info/testdefinitions/v4/>webac#> . @prefix fedora-internal: <info:fedora/fedora-system:def/internal#>acl: <http://www.w3.org/ns/auth/acl#> . @prefix imagens001: <http://www.modeshape.org/images/1.0>localhost:8080/rest/ktest/> . @prefix xsxsi: <http://www.w3.org/2001/XMLSchema>XMLSchema-instance> . @prefix xmlxmlns: <http://www.w3.org/XML2000/1998xmlns/namespace>> . @prefix fedorarelsextrdf: <info<http:fedora/fedora-system:def/relations-external#>//www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix mixfedora: <http://wwwfedora.jcp.orginfo/jcrdefinitions/mixv4/1.0>repository#> . @prefix modexml: <http://www.modeshapew3.org/1.0>/XML/1998/namespace> . @prefix svebucore: <http://www.jcpebu.orgch/metadata/jcrontologies/svebucore/1.0>ebucore#> . @prefix xsildp: <http://www.w3.org/2001ns/XMLSchema-instance>ldp#> . @prefix fedoraxs: <info:fedora/> . <http://localhost:8080/rest/> www.w3.org/2001/XMLSchema> . @prefix fedoraconfig: <http://microformatsfedora.orginfo/definitions/wiki/rel-sitemap> v4/config#> . @prefix foaf: <http://localhost:8080/rest/sitemap> ; xmlns.com/foaf/0.1/> . @prefix dc: <http://www.whatwg.org/specs/web-apps/current-work/#link-type-search>purl.org/dc/elements/1.1/> . <http://localhost:8080/rest/> fedora:lastModified <http://localhost:8080/rest/fcr:search> "2018-05-30T20:51:11.833Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedorardf:exportsAstype <http://localhost:8080/rest//fcr:export?format=jcr/xml> ; fedora-internal:clusterCacheModeldp:RDFSource ; rdf:type "LOCAL" ; fedora-internal:clusterMembers "local" ; ldp:Container ; fedora-internal:clusterName "ISPN" ; rdf:type fedora-internal:clusterNodeAddress "local" ldp:BasicContainer ; fedora-internal:clusterNodeView writable "Unknown"true ; fedora-internal:clusterPhysicalAddress ... |
The REST API supports a variety of RDF serialization formats, including:
Code Block |
---|
$ curl http://localhost:8080/rest/ -H "Accept: application/rdf+xml" <rdf:RDF rdf:type xmlns:fedora="info:fedora/":RepositoryRoot ; xmlns:fedora-internal="info:fedora/fedora-system:def/internal#" xmlns:image="http://www.modeshape.org/images/1.0" rdf:type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mix="http://www.jcp.org/jcr/mix/1.0" xmlns:test="info:fedora/test/" xmlns:fedorarelsext="info:fedora/fedora-system:def/relations-external#":Resource ; xmlns:nt="http://www.jcp.org/jcr/nt/1.0" rdf:type xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"fedora:Container ; xmlns:foaf="http://xmlns.com/foaf/0.1/" ldp:contains <http://localhost:8080/rest/ktest> ; xmlns:mode="http://www.modeshape.org/1.0" xmlns:j.0="info:fedora/fedora-system:def/internal#repository/" xmlns:xs="http://www.w3.org/2001/XMLSchema" ldp:contains xmlns:j.1="http://microformats.org/wiki/"<http://localhost:8080/rest/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5> ; xmlns:dc="http://purl.org/dc/terms/" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:j.2="http://www.whatwg.org/specs/web-apps/current-work/# ldp:contains <http://localhost:8080/rest/examples> ; ldp:contains <http://localhost:8080/rest/t1> ; fedora:hasTransactionProvider <http://localhost:8080/rest/fcr:tx> . |
The REST API supports a variety of RDF serialization formats, including:
Code Block |
---|
$ curl http://localhost:8080/rest/ -H "Accept: application/rdf+xml" -ufedoraAdmin:fedoraAdmin <rdf:RDF " xmlns:rdfsrdf="http://www.w3.org/20001999/0102/22-rdf-schema#" > syntax-ns#" <rdf:Description rdfxmlns:aboutacl="http://localhost:8080/rest//fcr:export?format=jcr/xml">www.w3.org/ns/auth/acl#" <rdfs:label>jcr/xml</rdfs:label> </rdf:Description> <rdf:Description rdf:aboutxmlns:ldp="http://www.w3.org/ns/ldp#" xmlns:xs="http://localhost:8080/rest/">www.w3.org/2001/XMLSchema" <fedora-internal:numberOfChildren rdf:datatypexmlns:rdfs="http://www.w3.org/20012000/XMLSchema#long">0<01/fedora-internal:numberOfChildren>rdf-schema#" <fedora-internal:hasNodeType>nt:unstructured</fedora-internal:hasNodeType>xmlns:webac="http://fedora.info/definitions/v4/webac#" <j.0:jcr.specification.version>2.0</j.0:jcr.specification.version>xmlns:ns001="http://localhost:8080/rest/ktest/" <j.0:option.unfiled.content.supported>false</j.0:option.unfiled.content.supported>xmlns:dc="http://purl.org/dc/elements/1.1/" <fedora-internal:clusterNodeAddress>local</fedora-internal:clusterNodeAddress>xmlns:ebucore="http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#" <fedora-internal:hasNodeType>mix:referenceable</fedora-internal:hasNodeType>xmlns:premis="http://www.loc.gov/premis/rdf/v1#" <j.0:node.type.management.update.in.use.suported>true</j.0:node.type.management.update.in.use.suported>xmlns:test="info:fedora/test/" <j.0:query.xpath.doc.order>false</j.0:query.xpath.doc.order>xmlns:fedora="http://fedora.info/definitions/v4/repository#" <j.0:level.2.supported>true</j.0:level.2.supported>xmlns:memento="http://mementoweb.org/ns#" <fedora-internal:hasNodeType>nt:resource</fedora-internal:hasNodeType>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <fedora-internal:hasNodeType>fedora:datastream</fedora-internal:hasNodeType> |
or
Code Block |
---|
$ curl http://localhost:8080/rest/ -H "Accept: application/n-triples" <httpxmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:fedoraconfig="http://fedora.info/definitions/v4/config#" > <rdf:Description rdf:about="http://localhost:8080/rest/"> <info:fedora/fedora-system:def/internal#numberOfChildren> "0"^^<http <rdf:type rdf:resource="http://wwwfedora.w3.orginfo/2001/XMLSchema#long> . <http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#hasNodeType> "nt:unstructured" . <httpdefinitions/v4/repository#Resource"/> <ldp:contains rdf:resource="http://localhost:8080/rest/examples"/> <info:fedora/fedora-system:def/internal#repository/jcr.specification.version> "2.0" . <http <ldp:contains rdf:resource="http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#repository/option.unfiled.content.supported> "false" . <http/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5"/> <fedora:hasTransactionProvider rdf:resource="http://localhost:8080/rest/fcr:tx"/> <info:fedora/fedora-system:def/internal#clusterNodeAddress> "local" . <http <ldp:contains rdf:resource="http://localhost:8080/rest/ktest"/> <info:fedora/fedora-system:def/internal#hasNodeType> "mix:referenceable" . <http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#repository/node.type.management.update.in.use.suported> "true" . <http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#repository/query.xpath.doc.order> "false" . <http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#repository/level.2.supported> "true" . <http://localhost:8080/rest/> <info:fedora/fedora-system:def/internal#hasNodeType> "nt:resource" . |
Create a new object
Code Block |
---|
$ curl <fedora:lastModified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2018-05-30T20:51:11.833Z</fedora:lastModified> <fedora:writable rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">true</fedora:writable> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#RDFSource"/> <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#RepositoryRoot"/> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#Container"/> <ldp:contains rdf:resource="http://localhost:8080/rest/t1"/> <rdf:type rdf:resource="http://fedora.info/definitions/v4/repository#Container"/> <rdf:type rdf:resource="http://www.w3.org/ns/ldp#BasicContainer"/> </rdf:Description> </rdf:RDF> |
or
Code Block |
---|
$ curl http://localhost:8080/rest/ -H "Accept: application/n-triples" -ufedoraAdmin:fedoraAdmin <http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#lastModified> "2018-05-30T20:51:11.833Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . <http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#RDFSource> . <http: -X POST -v * About to connect() to localhost port 8080 (#0) * Trying ::1... * connected * Connected to localhost (::1) port 8080 (#0) > POST /rest/fcr:new HTTP/1.1 > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5 > Host: localhost:8080 > Accept: */* > < HTTP/1.1 201 Created < Location: http://localhost:8080/rest/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf < Content-Type: text/plain < Transfer-Encoding: chunked < Server: Jetty(8.1.11.v20130520) $ curl http> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#Container> . <http://localhost:8080/rest/> <http:/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cfwww.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/ldp#BasicContainer> . <http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#writable> "true"^^<http://www.w3.org/2001/XMLSchema#boolean> . <http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#RepositoryRoot> . <http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#Resource> . <http://localhost:8080/rest/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://fedora.info/definitions/v4/repository#Container> . <http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/ktest> . <http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/91/86/4c/e0/91864ce0-9ad2-49cd-b2c3-85b0c6b204e5> . <http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/examples> . <http://localhost:8080/rest/> <http://www.w3.org/ns/ldp#contains> <http://localhost:8080/rest/t1> . <http://localhost:8080/rest/> <http://fedora.info/definitions/v4/repository#hasTransactionProvider> <http://localhost:8080/rest/fcr:tx> . |
Create a new object
Code Block |
---|
$ curl http://localhost:8080/rest/ -X POST -v -ufedoraAdmin:fedoraAdmin * Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8080 (#0) * Server auth using Basic with user 'fedoraAdmin' > POST /rest/ HTTP/1.1 > Host: localhost:8080 > Authorization: Basic ZmVkb3JhQWRtaW46ZmVkb3JhQWRtaW4= > User-Agent: curl/7.60.0 > Accept: */* > < HTTP/1.1 201 Created < Date: Thu, 02 Aug 2018 14:50:46 GMT < Set-Cookie: JSESSIONID=1aftnonavsnvk1q6ln4jtleda4;Path=/ < Expires: Thu, 01 Jan 1970 00:00:00 GMT < Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Wed, 01-Aug-2018 14:50:46 GMT < ETag: W/"187414816f9004f45508769998bec981ca90bea4" < Last-Modified: Thu, 02 Aug 2018 14:50:46 GMT < Link: <http://localhost:8080/static/constraints/ContainerConstraints.rdf>; rel="http://www.w3.org/ns/ldp#constrainedBy" < Link: <http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5/fcr:acl>; rel="acl" < Location: http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5 < Content-Type: text/plain < Content-Length: 63 < Server: Jetty(9.3.1.v20150714) < * Connection #0 to host localhost left intact http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5 $ curl http://localhost:8080/rest/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf -ufedoraAdmin:fedoraAdmin @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix test: <info:fedora/test/> . @prefix memento: <http://mementoweb.org/ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix webac: <http://fedora.info/definitions/v4/webac#> . @prefix acl: <http://www.w3.org/ns/auth/acl#> . @prefix ns001: <http://localhost:8080/rest/ktest/> . @prefix xsi: <http://www.w3.org/2001/XMLSchema-instance> . @prefix xmlns: <http://www.w3.org/2000/xmlns/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix fedora: <http://fedora.info/definitions/v4/repository#> . @prefix xml: <http://www.w3.org/XML/1998/namespace> . @prefix ebucore: <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#> . @prefix ldp: <http://www.w3.org/ns/ldp#> . @prefix xs: <http://www.w3.org/2001/XMLSchema> . @prefix fedoraconfig: <http://fedora.info/definitions/v4/config#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix dc: <http://purl.org/dc/elements/1.1/> . <http://localhost:8080/rest/39965e35-4cad-4b96-b826-0c8612f773d5> rdf:type fedora:Container ; rdf:type fedora:Resource ; rdf:type ldp:BasicContainer ; fedora:lastModifiedBy "fedoraAdmin" ;7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf> fedora:exportsAscreatedBy "fedoraAdmin" ; <http://localhost:8080/rest/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf/fcr:export?format=jcr/xml> ; fedora:created fedora-internal:baseVersion <info:fedora/jcr:system/jcr:versionStorage/0e/4e/11/0e4e11e565da7612554b06b092ee5e6e5fc1abec/jcr:rootVersion>"2018-08-02T14:50:46.121Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; fedora-internal:createdlastModified "20132018-0708-01T1702T14:5250:5146.406Z121Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; rdf:type fedora-internal:createdBy ldp:RDFSource ; "<anonymous>" ; rdf:type fedora-internal:createdby "<anonymous>"ldp:Container ; fedora-internal:hasParentwritable <http://localhost:8080/rest/7f/50/8e/82> ;true . |
Delete an object
Code Block |
---|
$ curl -X DELETE http://localhost:8080/rest/7f/50/8e/82/7f508e82-15f7-48de-92a3-2575a1b749cf39965e35-4cad-4b96-b826-0c8612f773d5 -ufedoraAdmin:fedoraAdmin |