syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Syncope > REST API upgrade
Date Mon, 28 Jan 2013 10:48:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/2042/9/3/_/styles/combined.css?spaceKey=SYNCOPE&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/SYNCOPE/REST+API+upgrade">REST API upgrade</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~ilgrosso">Francesco Chicchiricco</a>
    </h4>
        <br/>
                         <h4>Changes (3)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">Syncope&#39;s REST API has changed from version *&lt;&lt;placeholder&gt;&gt;* to *&lt;&lt;placeholder&gt;&gt;*. <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">{note:title=Version warning} <br>In Syncope 1.1.0 a new REST interface was introduced (referred as *_new_* in the following). <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">The REST interface available until 1.0.X (referred as *_old_* in the following) is still available but will be removed from releases &gt;= 1.2.0. <br>{note} <br> <br></td></tr>
            <tr><td class="diff-unchanged" >This page shall give you an overview of old and new REST API. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Version warning</b><br />In Syncope 1.1.0 a new REST interface was introduced (referred as <b><em>new</em></b> in the following).

<p>The REST interface available until 1.0.X (referred as <b><em>old</em></b> in the following) is still available but will be removed from releases &gt;= 1.2.0.</p></td></tr></table></div>

<p>This page shall give you an overview of old and new REST API.</p>

<div>
<ul>
    <li><a href='#RESTAPIupgrade-ConfigurationService'>Configuration Service</a></li>
    <li><a href='#RESTAPIupgrade-ConnectorService'>Connector Service</a></li>
    <li><a href='#RESTAPIupgrade-EntitlementService'>Entitlement Service</a></li>
    <li><a href='#RESTAPIupgrade-LoggerService'>Logger Service</a></li>
    <li><a href='#RESTAPIupgrade-NotificationService'>Notification Service</a></li>
    <li><a href='#RESTAPIupgrade-PolicyService'>Policy Service</a></li>
    <li><a href='#RESTAPIupgrade-ReportService'>Report Service</a></li>
    <li><a href='#RESTAPIupgrade-ResourceService'>Resource Service</a></li>
    <li><a href='#RESTAPIupgrade-RoleService'>Role Service</a></li>
    <li><a href='#RESTAPIupgrade-SchemaService'>Schema Service</a></li>
    <li><a href='#RESTAPIupgrade-TaskService'>Task Service</a></li>
    <li><a href='#RESTAPIupgrade-UserService'>User Service</a></li>
    <li><a href='#RESTAPIupgrade-UserRequestService'>UserRequest Service</a></li>
    <li><a href='#RESTAPIupgrade-WorkflowService'>Workflow Service</a></li>
</ul></div>

<p>Main focus on redesign REST interface was:</p>
<ol>
	<li>applying <a href="http://www.slideshare.net/calamitas/restful-best-practices" class="external-link" rel="nofollow">RESTful Best Practices</a>
	<ul>
		<li>use HTTP operations instead of URL encoded operation names</li>
		<li>GET does not modify any object (read-only safety operation)</li>
		<li>PUT and DELETE are idempotent operations</li>
	</ul>
	</li>
	<li>use URL parameters for search and filter restrictions</li>
</ol>


<p>In the near feature I would also like to replace the current search NodeCond with <a href="http://cxf.apache.org/docs/jax-rs-advanced-features.html#JAX-RSAdvancedFeatures-FIQLsearchqueries" class="external-link" rel="nofollow">FIQL searchqueries</a>.</p>

<p>There are some also suggestions regarding <a href="https://cwiki.apache.org/confluence/display/SYNCOPE/Remote+Exceptions" class="external-link" rel="nofollow">remote exceptions propagation</a>.</p>

<h2><a name="RESTAPIupgrade-ConfigurationService"></a>Configuration Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /configuration/create </td>
<td class='confluenceTd'> POST /configurations </td>
<td class='confluenceTd'> Creates a new Configuration. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/delete/{key} </td>
<td class='confluenceTd'> DELETE /configurations/{key} </td>
<td class='confluenceTd'> Deletes configuration with matching key. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/list </td>
<td class='confluenceTd'> GET /configurations </td>
<td class='confluenceTd'> Returns a list of all configuration elements. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/read/{key} </td>
<td class='confluenceTd'> GET /configurations/{key} </td>
<td class='confluenceTd'> Returns configuration element with matching key. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /configuration/update </td>
<td class='confluenceTd'> PUT /configurations/{key} </td>
<td class='confluenceTd'> Overwrites configuration element with matching key. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/validators </td>
<td class='confluenceTd'> GET /configurations/validators </td>
<td class='confluenceTd'> Returns a list of known validators. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/mailTemplates </td>
<td class='confluenceTd'> GET /configurations/mailTemplates </td>
<td class='confluenceTd'> Returns a list of known mail-templates. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /configuration/dbexport </td>
<td class='confluenceTd'> GET /configurations (Accept: application/octet-stream) </td>
<td class='confluenceTd'> Returns configuration as an downloadable content.xml database export file. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-ConnectorService"></a>Connector Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /connectors/create </td>
<td class='confluenceTd'> POST /connectors/ </td>
<td class='confluenceTd'> Creates a new connector instance. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/delete/{connectorId} </td>
<td class='confluenceTd'> DELETE /connectors/{connectorId} </td>
<td class='confluenceTd'> Deletes connector with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/list </td>
<td class='confluenceTd'> GET /connectors </td>
<td class='confluenceTd'> Returns a list of all connectors. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/read/{connectorId} </td>
<td class='confluenceTd'> GET /connectors/{connectorId} </td>
<td class='confluenceTd'> Returns connector with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /connectors/update </td>
<td class='confluenceTd'> PUT /connectors/{connectorId} </td>
<td class='confluenceTd'> Overwrites connector with matching key. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/bundle/list?lang={lang} </td>
<td class='confluenceTd'> GET /connectors/bundles?lang={lang} </td>
<td class='confluenceTd'> Returns known bundles. Default language is English. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /connectors/schema/list?showall={showall} </td>
<td class='confluenceTd'> GET /connectors/{connectorId}/schemas?showall={showall} <br class="atl-forced-newline" />
POST /connectors/{connectorId}/schemas?showall={showall} <br class="atl-forced-newline" /> </td>
<td class='confluenceTd'> Returns schema names for connector. Default is showAll=false. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/{connectorId}/configurationProperty/list </td>
<td class='confluenceTd'> GET /connectors/{connectorId}/configuration </td>
<td class='confluenceTd'> Returns configuration for selected connector. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /connectors/check </td>
<td class='confluenceTd'> POST /connectors/validate </td>
<td class='confluenceTd'> Validates connection. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /connectors/{resourceName}/connectorBean </td>
<td class='confluenceTd'> GET /connectors;resourceName={connectorId} </td>
<td class='confluenceTd'> Returns connection for resourceName. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-EntitlementService"></a>Entitlement Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /auth/allentitlements </td>
<td class='confluenceTd'> GET /entitlements </td>
<td class='confluenceTd'> Returns a list of all known entitlements. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /auth/entitlements </td>
<td class='confluenceTd'> GET /entitlements/own </td>
<td class='confluenceTd'> Returns a list of entitlements assigned to the authenticated user. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-LoggerService"></a>Logger Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /logger/log/list </td>
<td class='confluenceTd'> GET /logger </td>
<td class='confluenceTd'> Returns a list of all (normal) logger. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /logger/audit/list </td>
<td class='confluenceTd'> GET /logger/audit </td>
<td class='confluenceTd'> Returns a list of all audit logger. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /logger/log/{name}/{level} </td>
<td class='confluenceTd'> PUT /logger/{name}/level </td>
<td class='confluenceTd'> Creates or updates a logger with given name and sets logging level. Level will be now be part of payload instead of URL parameter. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /logger/delete/{name} </td>
<td class='confluenceTd'> DELETE /logger/{name} </td>
<td class='confluenceTd'> Deletes logger with matching name. </td>
</tr>
<tr>
<td class='confluenceTd'> PUT /logger/audit/enable </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Use "PUT /logger/{name}/level" to enables audit logger. </td>
</tr>
<tr>
<td class='confluenceTd'> PUT /logger/audit/disable </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Use "DELETE /logger/{name}" to disable audit logger. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-NotificationService"></a>Notification Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /notification/list </td>
<td class='confluenceTd'> GET /notifications/ </td>
<td class='confluenceTd'> Returns a list of all notifications. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /notification/read/{notificationId} </td>
<td class='confluenceTd'> GET /notifications/{notificationId} </td>
<td class='confluenceTd'> Returns a notification with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /notification/create </td>
<td class='confluenceTd'> POST /notifications </td>
<td class='confluenceTd'> Creates a new notification. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /notification/update </td>
<td class='confluenceTd'> PUT /notifications/{notificationId} </td>
<td class='confluenceTd'> Updates notification with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /notification/delete/{notificationId} </td>
<td class='confluenceTd'> DELETE /notifications/{notificationId} </td>
<td class='confluenceTd'> Deletes notification with matching id. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-PolicyService"></a>Policy Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/{kind}/list </td>
<td class='confluenceTd'> GET /policies/{kind} </td>
<td class='confluenceTd'> Returns a list of policies with matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/read/{id} </td>
<td class='confluenceTd'> GET /policies/{id} </td>
<td class='confluenceTd'> Returns a policy with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/account/create </td>
<td class='confluenceTd'> POST /policies </td>
<td class='confluenceTd'> Creates a new account policy. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/sync/create </td>
<td class='confluenceTd'> POST /policies </td>
<td class='confluenceTd'> Creates a new sync policy. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/password/create </td>
<td class='confluenceTd'> POST /policies </td>
<td class='confluenceTd'> Creates a new password policy. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/account/update </td>
<td class='confluenceTd'> PUT /policies/{id} </td>
<td class='confluenceTd'> Updates policy with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/sync/update </td>
<td class='confluenceTd'> PUT /policies/{id} </td>
<td class='confluenceTd'> Updates policy with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /policy/password/update </td>
<td class='confluenceTd'> PUT /policies/{id} </td>
<td class='confluenceTd'> Updates policy with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/delete/{id} </td>
<td class='confluenceTd'> DELETE /policies/{id} </td>
<td class='confluenceTd'> Deletes policy with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/account/global/read </td>
<td class='confluenceTd'> DELETE /policies/global/{kind} </td>
<td class='confluenceTd'> Returns global policy for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/sync/global/read </td>
<td class='confluenceTd'> DELETE /policies/global/{kind} </td>
<td class='confluenceTd'> Returns global policy for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /policy/password/global/read </td>
<td class='confluenceTd'> DELETE /policies/global/{kind} </td>
<td class='confluenceTd'> Returns global policy for matching kind. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-ReportService"></a>Report Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /report/create </td>
<td class='confluenceTd'> POST /reports </td>
<td class='confluenceTd'> Creates a new report. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /report/update </td>
<td class='confluenceTd'> PUT /reports/{reportId} </td>
<td class='confluenceTd'> Updates report with matching reportId. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /report/count </td>
<td class='confluenceTd'> POST /reports/count </td>
<td class='confluenceTd'> Returns number of existing reports. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/list </td>
<td class='confluenceTd'> GET /reports </td>
<td class='confluenceTd'> Returns a list of all reports. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/list/{page}/{size} </td>
<td class='confluenceTd'> GET /reports?page={page}&amp;size={size} </td>
<td class='confluenceTd'> Returns a list of reports according to pagination. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/execution/list </td>
<td class='confluenceTd'> GET /reports/executions </td>
<td class='confluenceTd'> Returns a list of all execution reports. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/reportletConfClasses </td>
<td class='confluenceTd'> GET /reports/reportletConfClasses </td>
<td class='confluenceTd'> Returns a list of all reportletConfClasses. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/read/{reportId} </td>
<td class='confluenceTd'> GET /reports/{reportId} </td>
<td class='confluenceTd'> Returns report with matching reportId. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/execution/read/{executionId} </td>
<td class='confluenceTd'> GET /reports/executions/{executionId} </td>
<td class='confluenceTd'> Returns execution report. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/execution/export/{executionId}?fmt={format} </td>
<td class='confluenceTd'> GET /reports/executions/{executionId}?format={format} (Accept: application/octet-stream) </td>
<td class='confluenceTd'> Returns execution report as an downloadable file. Format is optional. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /report/execute/{reportId} </td>
<td class='confluenceTd'> POST /reports/{reportId}/execute </td>
<td class='confluenceTd'> Executes report. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/delete/{reportId} </td>
<td class='confluenceTd'> DELETE /reports/{reportId} </td>
<td class='confluenceTd'> Deletes report with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /report/execution/delete/{executionId} </td>
<td class='confluenceTd'> DELETE /reports/executions/{executionId} </td>
<td class='confluenceTd'> Deletes execution report with matching id. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-ResourceService"></a>Resource Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /resource/create </td>
<td class='confluenceTd'> POST /resources </td>
<td class='confluenceTd'> Creates a new resource. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /resource/update </td>
<td class='confluenceTd'> PUT /resources/{resourceName} </td>
<td class='confluenceTd'> Updates resource with matching resourceName. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /resource/delete/{resourceName} </td>
<td class='confluenceTd'> DELETE /resources/{resourceName} </td>
<td class='confluenceTd'> Deletes resource with specified resourceName. HTTP operation is changed to DELETE, because GET operation must be safe. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /resource/read/{resourceName} </td>
<td class='confluenceTd'> GET /resources/{resourceName} </td>
<td class='confluenceTd'> Returns a resource with specified name. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /resource/propagationActionsClasses </td>
<td class='confluenceTd'> GET /resources/propagationActionsClasses </td>
<td class='confluenceTd'> Returns a list of classes with name PROPAGATION_ACTIONS. Actually method is used only in context of resources, therefore it is grouped to resources. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /resource/list </td>
<td class='confluenceTd'> GET /resources </td>
<td class='confluenceTd'> Returns a list of all resources. There is optional matrix parameter: connInstanceId. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /resource/{resourceName}/read/{type}/{objectId} </td>
<td class='confluenceTd'> GET /resources/{resourceName}/{type}/{objectId} </td>
<td class='confluenceTd'> Returns specified connector object for resource. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /resource/check </td>
<td class='confluenceTd'> POST /resources/validate </td>
<td class='confluenceTd'> Verifies connection using resource connector parameters. HTTP operation can be changed to GET if resource is always created previously. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-RoleService"></a>Role Service</h2>

<p>CRUD operations:</p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /role/create </td>
<td class='confluenceTd'> POST /roles/ </td>
<td class='confluenceTd'> Creates a new role. Returns URL to new role definition </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/list </td>
<td class='confluenceTd'> GET /roles </td>
<td class='confluenceTd'> Returns a list of all known roles </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/read/{roleId} </td>
<td class='confluenceTd'> GET /roles/{roleId} </td>
<td class='confluenceTd'> Returns a single role definition matching the provided roleID </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/selfRead/{roleId} </td>
<td class='confluenceTd'> GET /roles/{roleId} </td>
<td class='confluenceTd'> Authorization mechanisms will be independent of URL </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/parent/{roleId} </td>
<td class='confluenceTd'> GET /roles/{roleId}/parent </td>
<td class='confluenceTd'> Returns a single parent role definition (if available) </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/children/{roleId} </td>
<td class='confluenceTd'> GET /roles/{roleId}/children </td>
<td class='confluenceTd'> Returns a list of children role definitions </td>
</tr>
<tr>
<td class='confluenceTd'> POST /role/update </td>
<td class='confluenceTd'> POST /roles/{roleId} </td>
<td class='confluenceTd'> Updates role. (POST is used here instead of PUT, because RoleMod only contains changes for a role and not a complete representation thereof.) </td>
</tr>
<tr>
<td class='confluenceTd'> GET /role/delete/{roleId} </td>
<td class='confluenceTd'> DELETE /roles/{roleId} </td>
<td class='confluenceTd'> Deletes role. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-SchemaService"></a>Schema Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /schema/{kind}/list </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Returns a list of all "normal" schema definitions of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /virtualSchema/{kind}/list </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Returns a list of all "virtual" schema definitions of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /derivedSchema/{kind}/list </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Returns a list of all "derived" schema definitions of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /schema/{kind}/create </td>
<td class='confluenceTd'> POST /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Creates a new "normal" schema for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /virtualSchema/{kind}/create </td>
<td class='confluenceTd'> POST /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Creates a new "virtual" schema for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /derivedSchema/{kind}/create </td>
<td class='confluenceTd'> POST /schemas/{kind}/{type} </td>
<td class='confluenceTd'> Creates a new "derived" schema for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /schema/{kind}/delete/{name} </td>
<td class='confluenceTd'> DELETE /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Deletes matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /virtualSchema/{kind}/delete/{name} </td>
<td class='confluenceTd'> DELETE /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Deletes matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /derivedSchema/{kind}/delete/{name} </td>
<td class='confluenceTd'> DELETE /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Deletes matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /schema/{kind}/read/{name} </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Returns matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /virtualSchema/{kind}/read/{name} </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Returns matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /derivedSchema/{kind}/read/{name} </td>
<td class='confluenceTd'> GET /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Returns matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /schema/{kind}/update </td>
<td class='confluenceTd'> PUT /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Updates matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /virtualSchema/{kind}/update </td>
<td class='confluenceTd'> PUT /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Updates matching schema. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /derivedSchema/{kind}/update </td>
<td class='confluenceTd'> PUT /schemas/{kind}/{type}/{name} </td>
<td class='confluenceTd'> Updates matching schema. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-TaskService"></a>Task Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /task/create/sync </td>
<td class='confluenceTd'> POST /tasks </td>
<td class='confluenceTd'> Creates a new (sync) task. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /task/create/sched </td>
<td class='confluenceTd'> POST /tasks </td>
<td class='confluenceTd'> Creates a new (sched) task. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/{kind}/count </td>
<td class='confluenceTd'> GET /tasks/{kind}/count </td>
<td class='confluenceTd'> Returns number of tasks for matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/delete/{taskId} </td>
<td class='confluenceTd'> DELETE /tasks/{taskId} </td>
<td class='confluenceTd'> Deletes task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/execution/delete/{executionId} </td>
<td class='confluenceTd'> DELETE /tasks/executions/{executionId} </td>
<td class='confluenceTd'> Deletes execution of task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /task/execute/{taskId}?dryRun={dryRun} </td>
<td class='confluenceTd'> POST /tasks/{taskId}/execute?dryRun={dryRun} </td>
<td class='confluenceTd'> Executes task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/jobClasses </td>
<td class='confluenceTd'> GET /tasks/jobClasses </td>
<td class='confluenceTd'> Returns a list of available jobClasses. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/syncActionsClasses </td>
<td class='confluenceTd'> GET /tasks/syncActionsClasses </td>
<td class='confluenceTd'> Returns a list of available syncActionsClasses. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/{kind}/list </td>
<td class='confluenceTd'> GET /tasks/{kind} </td>
<td class='confluenceTd'> Returns a list of task of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/{kind}/list/{page}/{size} </td>
<td class='confluenceTd'> GET /tasks/{kind}?page={page}&amp;size={size} </td>
<td class='confluenceTd'> Returns a list of task of matching kind with page contrains. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/{kind}/execution/list </td>
<td class='confluenceTd'> GET /tasks/{kind}/executions </td>
<td class='confluenceTd'> Returns list of executions with matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/read/{taskId} </td>
<td class='confluenceTd'> GET /tasks/{taskId} </td>
<td class='confluenceTd'> Returns task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/execution/read/{executionId} </td>
<td class='confluenceTd'> GET /tasks/executions/{executionId} </td>
<td class='confluenceTd'> Returns execution of task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /task/update/sync </td>
<td class='confluenceTd'> PUT /tasks/{taskId} </td>
<td class='confluenceTd'> Updates (sync) task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /task/update/sched </td>
<td class='confluenceTd'> PUT /tasks/{taskId} </td>
<td class='confluenceTd'> Updates (sched) task with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /task/execution/report/{executionId}<br class="atl-forced-newline" />
 ?executionStatus={executionStatus}&amp;message={message} </td>
<td class='confluenceTd'> POST /tasks/executions/{executionId}/report </td>
<td class='confluenceTd'> Creates a report for matching execution id. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-UserService"></a>User Service</h2>

<p>CRUD operations:</p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> POST /user/create </td>
<td class='confluenceTd'> POST /users </td>
<td class='confluenceTd'> Creates a new user. <em>(Returns URL to new user definition)</em> </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/list </td>
<td class='confluenceTd'> GET /users </td>
<td class='confluenceTd'> Returns a list of all known users </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/list/{page}/{size} </td>
<td class='confluenceTd'> GET /users?page={page}&amp;size={size} </td>
<td class='confluenceTd'> Returns a list of known users matching page/size conditions </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/read/{userId} </td>
<td class='confluenceTd'> GET /users/{userId} </td>
<td class='confluenceTd'> Returns a single user matching the provided userId </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/readByUsername/{username} </td>
<td class='confluenceTd'> GET /users;uname={username} </td>
<td class='confluenceTd'> Returns a single user matching the provided username </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/search </td>
<td class='confluenceTd'> POST /users/search </td>
<td class='confluenceTd'> Returns a list of user matching the provided search conditions. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/search/{page}/{size} </td>
<td class='confluenceTd'> POST /users/search?page={page}&amp;size={size} </td>
<td class='confluenceTd'> Returns a list of user matching the provided page/size and search conditions. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/count </td>
<td class='confluenceTd'> GET /users/count </td>
<td class='confluenceTd'> Returns a number of existing users. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/search/count </td>
<td class='confluenceTd'> POST /users/search/count </td>
<td class='confluenceTd'> Returns a number of user matching the provided search conditions. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/verifyPassword/{username}?password={password} </td>
<td class='confluenceTd'> GET /users;uname={username};pwd={password} </td>
<td class='confluenceTd'> Returns user if username and password match with an existing account. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/update </td>
<td class='confluenceTd'> POST /users/{userId} </td>
<td class='confluenceTd'> Updates user. (POST is used here instead of PUT, because UserMod only contains changes for a user and not a complete representation thereof.) </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/delete/{userId} </td>
<td class='confluenceTd'> DELETE /users/{userId} </td>
<td class='confluenceTd'> Deletes user. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /deleteByUsername/{username} </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Please use 'GET /user;uname={username}' to discover userId and then use 'DELETE /user/{userId}' to delete user. </td>
</tr>
</tbody></table>
</div>


<p>Account status:</p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /user/activate/{userId} </td>
<td class='confluenceTd'> POST /users/{userId}/status </td>
<td class='confluenceTd'> Post a new StatusMod element with status ACTIVATE. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/activateByUsername/{username} </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Please use 'GET /user;uname={username}' to discover userId and then use 'POST /user/{userId}/status' to enable user account. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/reactivate/{userId} </td>
<td class='confluenceTd'> POST /users/{userId}/status </td>
<td class='confluenceTd'> Post a new StatusMod element with status REACTIVATE. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/reactivateByUsername/{username} </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Please use 'GET /user;uname={username}' to discover userId and then use 'POST /user/{userId}/status' to reactivate user account. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/suspend/{userId} </td>
<td class='confluenceTd'> POST /users/{userId}/status </td>
<td class='confluenceTd'> Post a new StatusMod element with status SUSPEND. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/suspendByUsername/{username} </td>
<td class='confluenceTd'> <em>&lt;&lt;removed&gt;&gt;</em> </td>
<td class='confluenceTd'> Please use 'GET /user;uname={username}' to discover userId and then use 'POST /user/{userId}/status' to suspend user account. </td>
</tr>
</tbody></table>
</div>


<p>Workflow actions: <font color="red"><em>TODO: Is this a good design decision? Should these activities be moved to WorkflowController?</em></font></p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /user/workflow/form/list </td>
<td class='confluenceTd'> GET /users/workflow/form </td>
<td class='confluenceTd'> Returns a list of user workflow forms. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/workflow/form/{userId} </td>
<td class='confluenceTd'> GET /users/{userId}/workflow/form </td>
<td class='confluenceTd'> Returns a (single) workflow form assigned to user. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/workflow/form/submit </td>
<td class='confluenceTd'> POST /users/workflow/form </td>
<td class='confluenceTd'> Submittes a form to a user workflow. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/execute/workflow/{taskId} </td>
<td class='confluenceTd'> POST /users/workflow/task/{taskId}/execute </td>
<td class='confluenceTd'> Executes workflow task on user. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /workflow/form/claim/{taskId} </td>
<td class='confluenceTd'> POST /users/workflow/task/{taskId}/claim </td>
<td class='confluenceTd'> Claims workflow task for authenticated (session) user. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-UserRequestService"></a>UserRequest Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /user/request/create/allowed </td>
<td class='confluenceTd'> GET /requests/user/create/allowed </td>
<td class='confluenceTd'> Returns true/false whether user is allowed to create a new user. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/request/create </td>
<td class='confluenceTd'> POST /requests/user/create </td>
<td class='confluenceTd'> Creates a new user creation request. </td>
</tr>
<tr>
<td class='confluenceTd'> POST /user/request/update </td>
<td class='confluenceTd'> POST /requests/user/update </td>
<td class='confluenceTd'> Creates a new user update request. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/request/delete/{userId} </td>
<td class='confluenceTd'> POST /requests/user/delete </td>
<td class='confluenceTd'> Creates a new user delete request. (Id will now be part of HTTP body) </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/request/list </td>
<td class='confluenceTd'> GET /requests/user </td>
<td class='confluenceTd'> Returns a list of all user requests. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/request/read/{requestId} </td>
<td class='confluenceTd'> GET /requests/user/{requestId} </td>
<td class='confluenceTd'> Returns a user request with matching id. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /user/request/deleteRequest/{requestId} </td>
<td class='confluenceTd'> DELETE /requests/user/{requestId} </td>
<td class='confluenceTd'> Deletes request with matching id. </td>
</tr>
</tbody></table>
</div>


<h2><a name="RESTAPIupgrade-WorkflowService"></a>Workflow Service</h2>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Old URL </th>
<th class='confluenceTh'> New URL </th>
<th class='confluenceTh'> Comment </th>
</tr>
<tr>
<td class='confluenceTd'> GET /workflow/definition/user </td>
<td class='confluenceTd'> GET /workflows/{kind} </td>
<td class='confluenceTd'> Returns a workflow definition of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /workflow/definition/role </td>
<td class='confluenceTd'> GET /workflows/{kind} </td>
<td class='confluenceTd'> Returns a workflow definition of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> PUT /workflow/definition/user </td>
<td class='confluenceTd'> PUT /workflows/{kind} </td>
<td class='confluenceTd'> Creates or updates workflow definition of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> PUT /workflow/definition/role </td>
<td class='confluenceTd'> PUT /workflows/{kind} </td>
<td class='confluenceTd'> Creates or updates workflow definition of matching kind. </td>
</tr>
<tr>
<td class='confluenceTd'> GET /workflow/tasks/user </td>
<td class='confluenceTd'> GET /workflows/{kind}/tasks </td>
<td class='confluenceTd'> Returns workflow tasks with matching kind. </td>
</tr>
</tbody></table>
</div>

    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action" class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/SYNCOPE/REST+API+upgrade">View Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=30740758&revisedVersion=39&originalVersion=38">View Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/SYNCOPE/REST+API+upgrade?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message