Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
HTML Wrap
alignright
classmenu

Related topics:

This page is intended for developers who want to start using Magnolia REST features.

In this page, we:

...

Excerpt

REST endpoints enable other software to get real, raw content directly from Magnolia. This is how mobile apps, front-end JavaScript apps, or systems, like e-commerce or banking systems, can connect with Magnolia. With our out-of the-box delivery endpoint , this is easy and fast to set up, more powerful and more performant than ever.

This beginner's tutorial is intended for developers who want to start using Magnolia REST features

...

.

Table of Contents
maxLevel3
minLevel2

Key points

This section is a very brief summary of the most important things from the sections below.

To use Magnolia REST features:

  • Set up Magnolia with version 5.6 or higher; you may want to use a preconfigured Magnolia bundle.
  • Make sure your bundle contains at least the Magnolia REST modules magnolia-rest-integrationmagnolia-rest-servicesmagnolia-rest-content-delivery (version 2.0 or higher). See REST module - Installing if needed.
  • Design a security strategy with custom users to access the REST endpoint. To start immediately or for testing purposes, you can use superuser on the author instance and anonymous user on the public instance at your own risk.
  • Provide YAML configuration to enable the usage of the delivery endpoint in a light module.

    Expand
    titleClick here to get a starting point for configuration
    Code Pro
    languageyaml
    titledelivery-base-definition.yaml
    linenumberstrue
    class: info.magnolia.rest.delivery.jcr.v1.JcrDeliveryEndpointDefinition
    params:
      website:
        depth: 2
        nodeTypes:
          - mgnl:page
          - mgnl:area
          - mgnl:component
        childNodeTypes:
          - mgnl:area
          - mgnl:component
        rootPath: /
        includeSystemProperties: false

    Read Delivery endpoint API - YAML configuration for further details.

  • cURL:

    Code Pro
    curl -X GET 'http://localhost:8080/magnoliaPublic/.rest/delivery/website/v1/travel/about'

    and GET a REST.

Setup

In this section, we assume you are using a Magnolia bundle version 5.6 or higher and you know how to:

  • Install Magnolia.
  • Set the magnolia.resources.dir property in the magnolia.properties file.
  • Start and stop Magnolia.
Bestpractice

We recommend you have one common directory for the magnolia.resources.dir on both magnoliaAuthor and magnoliaPublic webapps. We will use it later on for a shared configuration.

Tip

If you do not know how to do all of this, see Set up a Magnolia bundle with all REST modules - step by step instead.

Required modules

The modules listed below are required to use all Magnolia REST features in a productive context:

  • magnolia-rest-integration
  • magnolia-rest-services
  • magnolia-rest-content-delivery

When using a preconfigured Magnolia bundle, your webapps already contain these three modules. If you are using a custom webapp or bundle, make sure your custom setup contains the modules listed above. See REST module - Installing if needed.

When developing new features, it can be helpful to use the magnolia-rest-tools module which enables Swagger UI tools. 

...

If you do not want to use the Swagger UI tools, skip ahead to security settings.

Multiexcerpt include
MultiExcerptNamegeneral_info
PageWithExcerpt_enabling and using swagger

Installing the magnolia-rest-tools module

To enable Swagger you must add magnolia-rest-tools to your webapp(s). 

With Maven

Add the following snippet to the pom file of your webapp:

Artifact maven dependencies snippet
groupIdinfo.magnolia.rest
artifactIdmagnolia-rest-tools

With a downloaded bundle

If you are running a preconfigured Magnolia Tomcat bundle:

  • Stop the Tomcat server.
  • Download the REST tools bundle 
    Artifact resource link
    groupIdinfo.magnolia.rest
    artifactIdmagnolia-rest-tools
    label$artifactId.zip
    renderTypedownload_link
    resourceTypeZIP
    .
  • Unzip the download and copy* all the files to: 
    • $tomcat/webapps/magnoliaAuthor/WEB-INF/lib
    • $tomcat/webapps/magnoliaPublic/WEB-INF/lib (if the directory already exists)

* The zip file may contain .jar files which are already present in the WEB-INF/lib folder of your webapps.

Set the Swagger API base path

...

MultiExcerptNamesetting-swagger-base-path

The Swagger API explorer tool searches for the API at a path set in /modules/rest-tools/config/apiBasepath. The default value is  http://localhost:8080/.rest . The value for this property must match the following pattern:

Code Block
languageerl
<protocol>://<hostname>:<port>/<context>/.rest

When using one of Magnolia's preconfigured bundles running on localhost, set the property to http://localhost:8080/magnoliaAuthor/.rest .

Set the path to where REST services reside on your system. If you run the standard Magnolia bundle and work on the author instance, set the path to  http://localhost:8080/magnoliaAuthor/.rest .

Getting content with REST - examples

Tip

Mozilla Firefox includes a JSON viewer. We suggest you use Firefox to view the links below in a more readable format.

Look at the following examples of how to get content from our public demo using our out-of-the-box REST API.

ExampleWebsiteREST result

Get one specific item using the default delivery endpoint. In this example we get a specific tour published to our public demo site by providing the path:

.rest/delivery/tours/v1/magnolia-travels/A-Taste-of-Malaysia

Image Added

Image Added

Get all content from a sub-resource using the default delivery endpoint. In this example we get all the tours published to our public demo site:

.rest/delivery/tours/v1

Image Added

Image Added

Run a fulltext search for the word "landscape" in all the tours published to our public demo site using the default delivery endpoint:

.rest/delivery/tours/v1/?q=landscape

Image Added

Image Added

Filter on the isFeatured property and on tags health and sale applied to tours using the default delivery endpoint:

.rest/delivery/tours/v1/?isFeatured=true&mgnl:tags=health&mgnl:tags=sale

Image Added

Image Added

Get tour content limited to five results and and offset to begin at number ten using the default delivery endpoint:

.rest/delivery/tours/v1/?limit=5&offset=10

Image Added

Image Added

Anchor
setup
setup
Setting up Magnolia for REST

In this section you use Magnolia CLI to install and start a preconfigured Magnolia 5.6.0 bundle with the required modules for Magnolia REST features.

Expand
titleHey, why 5.6.0?

The latest version of Magnolia is 5.6.1 so you're right to wonder.

Currently in Magnolia, we only support a single delivery endpoint configuration. In Magnolia 5.6.1, a preconfigured endpoint is delivered by default making it a little difficult to create your own endpoint later on in this tutorial. Magnolia 5.6.0 does not deliver a preconfigured endpoint.

Soon this point will be moot as we plan to support multiple endpoints. Keep an eye on

Jira
serverMagnolia - Issue tracker
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId500b06a6-e204-3125-b989-2d75b973d05f
keyMGNLREST-152
to see how development is coming along!

If you do not have Magnolia CLI, install it as described here.

Then install Magnolia as follows:

  1. Change to the directory to where you want to install the Magnolia bundle

...

enableHeadingAttributesfalse
enableSortingfalse
classm5-configuration-tree
enableHighlightingfalse

...

Mgnl f
modules

...

Mgnl f
rest-tools

...

Mgnl f
config

...

Mgnl p
apiBasepath

...

http://localhost:8080/magnoliaAuthor/.rest

After setting the base path, restart Magnolia.

Swagger UI tools is in Dev > REST Tools.

...

This section provides step by step instructions to set up a Magnolia bundle that contains all REST modules including the magnolia-rest-tools module to use Swagger UI tools. The procedure uses Magnolia CLI. If you are an experienced Magnolia user, you can skip this and set up Magnolia in your preferred style.

...

titleExpand to see the step by step procedure

...

Choose a directory to work in.

...

  1. . In our example, we use the directory ~/dev/mgnl-rest-test-base

...

  1. :

    Code Block

...

  1. cd ~/dev/mgnl-rest-test-base

...

Download a bundle with Magnolia CLI.

  1. Execute the Magnolia CLI  jumpstart  command to get Magnolia 5.6.0:

    Code Block

...

  1. mgnl jumpstart -m 5.6

    Jumpstart downloads and extracts

...

  1. the magnolia-community-demo-bundle

...

  1.  5.6.0 that comes with Tomcat server.

...

  1.  

    The following files and folders are created

Jumpstart also sets the property magnolia.resources.dir in the file magnolia.properties.

...

  1. :

    Code Block
    languagetext
    mgnl-rest-test-base/
    ├── apache-tomcat
    ├── light-modules
    └── magnolia.zip

We will need the light-modules folder later on. (warning) Do not start the Tomcat server yet.

...

Add magnolia-rest tools to your bundle.

...

Artifact resource link
groupIdinfo.magnolia.rest
artifactIdmagnolia-rest-tools
label$artifactId.zip
renderTypedownload_link
resourceTypeZIP

...

  1. Go to the ~dev/mgnl-rest-test-base

...

Start Magnolia.

...

  1. directory

...

  1. and execute the

...

  1. Magnolia CLI  start  command:

    Code Block

...

  1. mgnl start

...

  1. When starting for the first time, Magnolia

...

Log in to the author instance.

  1. runs a web update and automatically installs all its modules.

  2. In your preferred browser, open the URL http://localhost:8080/magnoliaAuthor/ and log in as user superuser with the password superuser.

...

  1. Have a look around Magnolia. Access the public instance with the URL http://localhost:8080/magnoliaPublic

...

Set the Swagger base API path.

In order to properly use the Swagger UI tools - which are used for development only - you must change one property in the configuration.

On the Admin UI, open the Configuration app and find the node /modules/rest-tools/config. (You can use the URL http://localhost:8080/magnoliaAuthor/.magnolia/admincentral#app:configuration:browser;/modules/rest-tools/config:treeview: to go there directly.)

...

  1. /.

...

...

Restart Magnolia.

Go to the shell where you started Magnolia.

To stop the server, press cmd + C (on Mac) or ctrl + C (on Windows). Give the server some time to properly shut down.

Then start it again:

Code Block
cd ~dev/mgnl-rest-test-base
mgnl start

Anchor
security
security
Security settings

...

Multiexcerpt include
MultiExcerptNamegeneral-security-advice
PageWithExcerptREST security
.

You must read and understand REST security before enabling and using the REST endpoints in a productive environment.

In the context of this tutorial and to get started quickly, we use users with roles provided by the default setup of the Magnolia bundle

...

:

...

  • superuser in the author

...

  • instance has:
    • Read/Write access for the path / on every JCR workspace, granted by the  superuser
  •  
    • role.
    • Web access for the HTTP methods 

      Mgnl get
      Mgnl put
      Mgnl post
       and 
      Mgnl delete
       for the path /magnoliaAuthor/.rest* 

  • -
    • granted by the role rest-admin.

Note that superuser is given a lot of power. Use it carefully in the context of this tutorial.  But never use superuser on a productive environment.

Using anonymous in the public instance

The public instance is typically visited by users who do not authenticate. These visits are done as the anonymous user, who also has some permissions.

...

  • anonymous (unauthenticated user) in the public instance has:

    • Read access on the path /

    for
    •  for the JCR workspaces websitedamgoogleSitemapscategory, and tours.

    • Web access for the HTTP

    method
    • method GET  for the path /magnoliaAuthor/.rest/delivery/*

As you can see, anonymous user only has read access and can only access the Delivery endpoint. That is sufficient for the moment.

In a productive environment we highly recommend you create custom REST roles granting specific access for specific use cases.

...

Magnolia provides the following REST endpoints out-of-the-box:

Multiexcerpt include
MultiExcerptNameendpoints-overview
PageWithExcerptREST API

If you want to use REST to create, update and delete content, we recommend you use the Nodes endpoint which supports all required operations. If you mainly want to read data, consider using the Delivery endpoint. It provides convenient, formatted JSON and can be customized and configured with YAML via light module. With the Commands endpoint you can trigger commands and Cache endpoint deals with cache.

You can also create your own custom endpoints

Tools to test REST requests

In this section, we suggest some tools you can use to test the REST API without needing to develop a REST consuming client application. Testing your REST requests is useful when you are developing client apps and similar things that interact with the REST endpoints.

Browsers

...

A browser provides only limited control to tailor a request without further add-ons. Requests are sent as GET and you cannot add more request headers out of the box.

...

If you want to test on REST resources via  GET , which requires authetication to get assigned roles not provided to the anonymous user: log in to Magnolia first; open a new tab in the same window (using the same session); and then request the REST resource.

Upgrade the browser with add-ons to extend its possibilities to control the request.

Before  enabling and using the REST endpoints in a  production  environment, y ou must read and understand  REST security .

...

cURL

cURL is a command line tool. It can be used on most well-known operating systems.

...

On the first attempt of a request, use the -i option to display all response headers.

If the response body is fine and delivers JSON, pretty-print and colorize the response body with tools such as jq.

Image Removed

Swagger UI tools

If you have not installed magnolia-rest-tools, which provides the Swagger UI tools, skip this section or see how to enable the swagger tools above.

...

Seamlessly integrated into the Magnolia Admin UI. Comfortable to use form-based interface.

...

The endpoints require specific annotations to make them appear on the Swagger UI tools. Delivery endpoint is not annotated and does not appear on the Swagger tools. REST request is sent by the user who logged into Magnolia; it is difficult to test with different users.

Starting the Swagger UI tools

Go to Dev > REST Tools.

Multiexcerpt
MultiExcerptNameswagger-start

When you open the the Magnolia REST Tools app, you should see something similar to this screen: 

Image Removed

The Swagger UI lists the bundled endpoints which already have Swagger annotations. These are the endpoints from themagnolia-rest-services module (propertiesv1, commandsv2, nodesv1) and one from the cache-browser-app (cachev1).

Click on one of the links to open a submenu that shows all supported operations provided by the endpoint.

Click List operations or Expand operations to get the details for the operations.

Here is an example for the nodes endpoint 

Mgnl get
 operation:

Image Removed

Enter values at least for the mandatory parameters and click Try it out!.

Swagger shows the response code, the response headers and the response body:

Image Removed

Using the delivery endpoint

The delivery endpoint is a REST API provided by Magnolia out-of-the-box. Use it for obtaining JCR data as JSON. 

In addition to defining security settings, you You must provide YAML-based configuration for the delivery endpoint so that it can serve JSON.

...

Code Pro
languagebash
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/delivery/website/v1/travel/about' \
-u superuser:superuser

Anchor
anc-restendpointsoverview
anc-restendpointsoverview
REST endpoints overview

Magnolia provides the following REST endpoints out-of-the-box:

Multiexcerpt include
MultiExcerptNameendpoints-overview
PageWithExcerptREST API

If you want to use REST to create, update and delete content, we recommend you use the Nodes endpoint which supports all required operations. If you mainly want to read data, consider using the Delivery endpoint. It provides convenient, formatted JSON and can be customized and configured with YAML via light module. With the Commands endpoint you can trigger commands and Cache endpoint deals with cache. 

Further reading