The Development Tools module provides a basis for creating plugins to interact with a running Magnolia instance. Using the endpoints provided by this module you can create interactive IDEs with intellisense features to help facilitate the development process.
Installing
Maven is the easiest way to install the module. Add the following dependency to your bundle:
<dependency> <groupId>info.magnolia.development</groupId> <artifactId>magnolia-development-tools</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
Usage
This module comes with 2 REST endpoints. One for querying the different definition registries and another for creating workspaces.
Registry Endpoint
Returns registry data in the form of a JSON object.
Request URL
/.rest/registry/v1/{registry}/{module}
Parameter | Description | Parameter type | Data type |
| required The name of the registry to access. Get all items from a specific registry. Example: Get a list of problems from all definitions by using |
|
|
module | optional Used together with a | path | String |
type | optional Used together with a | query | String |
| optional, default is Used together with a |
|
|
Example: Get all modules
Get all the modules from the ModuleRegistry
.
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/registry/v1/modules' \ -u superuser:superuser
Example: Get a list of definition registries used by a module
Query a specific module for the definition types it provides.
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/registry/v1/modules/ui-framework' \ -u superuser:superuser
[ "dialogs", "fieldTypes" ]
Example: Get a list of definitions for a specific type
Get a list of all definitions by type. This will include the relative path if one exists.
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/registry/v1/modules/ui-framework?type=dialogs \ -u superuser:superuser
[ "folder", "importZip", "rename" ]
Example: Get all modules providing definitions
Get all the modules which provide definitions.
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/registry/v1/modules?onlyDefinitionProviders=true' \ -u superuser:superuser
Repository Endpoint
Create the workspace and node type. The access permissions on the workspace are created for the superuser.
Request URL
/.rest/repository/v1/workspace/{name}
Parameter | Description | Parameter type | Data type |
| required The name of the workspace to be created. |
|
|
Example: Create a workspace
Create a workspace named events with a node type name event.
If the workspace name is plural (i.e. ending in 's') then the node type will be created singular. Otherwise the node type will have the same name as the workspace.
curl -X GET 'http://localhost:8080/magnoliaAuthor/.rest/repository/v1/workspace/events' \ -u superuser:superuser
{ Workspace events created }
Source Code
The source for this module can be found here: https://github.com/magnolia-community/development-tools
Issues, Bugs, Improvements
Report them here: https://github.com/magnolia-community/development-tools/issues
3 Comments
Christopher Zimmermann
Really nice initiative. It would also be cool to have an endpoint to get the problems listed in the Problems tab in the Definitions app. Then an IDE, or at least a web page could display the problems in a custom way. Maybe an IDE could even indicate problems directly in the code editor of the YAML file.
Richard Gange
Great suggestion. That would be amazing.
Christopher Zimmermann
Another thing that could be handy is an endpoint to get the "structure" of a definition type. It looks like some YAML IDE plugins can leverate an associated jsonschema file to provide in-editor intelligence. Maybe an endpoint could generate the jsonschema file for a definition type - ie for a dialog.
Refs:
https://github.com/redhat-developer/yaml-language-server (search for "schema")
https://json-schema.org/