Difference between revisions of "REST API:package Resource"
imported>Aeric |
imported>Aeric |
||
Line 3: | Line 3: | ||
:''Learn more:'' REST API [[REST API#Conventions and Considerations|Conventions and Considerations]]. | :''Learn more:'' REST API [[REST API#Conventions and Considerations|Conventions and Considerations]]. | ||
__TOC__ | __TOC__ | ||
===Permissions=== | ===Permissions=== | ||
{{permissions|Manage | {{TBD|Are the permission(s) right?}} -- check [[Administrative Permissions]] for a list of possibilities | ||
:* [[Develop Tools]] permission must be enabled for the tenant. | |||
{{permissions|Access Control/User Management|use this resource.}} | |||
{{permissions|Manage Develop Features|use this resource.}} | |||
===List All __resourceName__ (Record)s=== | |||
("Get" if complete records are returned. "List" if partial data is returned, requiring a second read to get a complete set of data. This comes before the GET, because typically it's called first to get the ID used in a specific-record GET.) | |||
;Method:GET | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__</nowiki></tt> | |||
:Return all fields | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__?{query_parameters}</nowiki></tt> | |||
{{Query Parameters| | |||
:Introductory sentence, if any | |||
:*<tt>parameter1</tt> - Description | |||
:*<tt>parameter2</tt> | |||
::* If TRUE, ... | |||
::* If FALSE, ...}} | |||
;Response: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<__resourceName__> | |||
<id>...</id> | |||
<field>data</field> | |||
... | |||
</__resourceName__> | |||
<__resourceName__> | |||
... | |||
</__resourceName__> | |||
... | |||
<message> | |||
<code>0</code> | |||
<description>Success</description> | |||
</message> | |||
<recordCount>N</recordCount> <!-- Number of __ records returned --> | |||
</platform> | |||
</syntaxhighlight> | |||
:See also: [[REST API:Error Codes]] | |||
===Get a __resourceName__ Record=== | |||
;Method:GET | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__/{recordId}</nowiki></tt> | |||
:Return all fields | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__/{recordId}?{query_parameters}</nowiki></tt> | |||
{{Query Parameters| | |||
:Introductory sentence, if any | |||
::*<tt>parameter1</tt> - Description | |||
::*<tt>parameter2</tt> | |||
:::* If <tt>true</tt>, ... | |||
:::* If '''<tt>false</tt>''', ... ('''default''')}} | |||
;Response: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<__resourceName__> | |||
<id>...</id> | |||
<field>data</field> | |||
... | |||
</__resourceName__> | |||
<message> | |||
<code>0</code> | |||
<description>Success</description> | |||
</message> | |||
</platform> | |||
</syntaxhighlight> | |||
:See also: [[REST API:Error Codes]] | |||
===Add a __resourceName__ Record=== | |||
;Method:POST | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__</nowiki></tt> | |||
;Request: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<__resourceName__> | |||
<field>data</field> | |||
... | |||
</__resourceName__> | |||
</platform> | |||
</syntaxhighlight> | |||
;Response: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<message> | |||
<code>0</code> | |||
<description>Success</description> | |||
<id>...</id> <!-- ID of the newly created __resourceName__ --> | |||
</message> | |||
</platform> | |||
</syntaxhighlight> | |||
:See also: [[REST API:Error Codes]] | |||
===Update a __resourceName__ Record=== | |||
;Method:PUT | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__/{recordId}</nowiki></tt> | |||
;Request: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<__resourceName__> | |||
<id>{recordId}</id> | |||
... | |||
</__resourceName__> | |||
</platform> | |||
</syntaxhighlight> | |||
;Response: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<message> | |||
<code>0</code> | |||
<description>Success</description> | |||
</message> | |||
</platform> | |||
</syntaxhighlight> | |||
:See also: [[REST API:Error Codes]] | |||
===Delete a __resourceName__ Record === | |||
;Method:DELETE | |||
;URI:<tt><nowiki>https://{domain}/networking/rest/__resourceName__/{recordId}</nowiki></tt> | |||
;Response: | |||
:<syntaxhighlight lang="xml" enclose="div"> | |||
<platform> | |||
<message> | |||
<code>0</code> | |||
<description>Success</description> | |||
</message> | |||
</platform> | |||
</syntaxhighlight> | |||
:See also: [[REST API:Error Codes]] | |||
=== Subscribe to a Package === | === Subscribe to a Package === | ||
Use this resource to install a [[Package]]. | Use this resource to install a [[Package]]. | ||
{{permissions|Manage Packages|use this resource.}} | |||
;Method:POST | ;Method:POST | ||
Line 42: | Line 194: | ||
===Download a Package=== | ===Download a Package=== | ||
Download a package as a zip file. | Download a package as a zip file. | ||
{{permissions|Manage Packages|use this resource.}} | |||
;Method:POST | ;Method:POST | ||
;URI:<tt><nowiki>https://{domain}/networking/rest/package/operation/download/{package_id}?{query_parameters}</nowiki></tt> | ;URI:<tt><nowiki>https://{domain}/networking/rest/package/operation/download/{package_id}?{query_parameters}</nowiki></tt> | ||
Line 88: | Line 243: | ||
:See also: [[REST API:Error Codes|REST API Error Codes]] | :See also: [[REST API:Error Codes|REST API Error Codes]] | ||
====Sample Package Download Client Program==== | ====Sample Package Download Client Program==== | ||
Line 96: | Line 250: | ||
Deploy a package to a list of tenants, where both the package to deploy and the tenant list are specified in the request. | Deploy a package to a list of tenants, where both the package to deploy and the tenant list are specified in the request. | ||
{{permissions|Manage Packages|use this resource, and [[Mass Deployment of Packages to Tenants]] must be enabled for the publishing tenant.}} | |||
;Method:POST | ;Method:POST |
Revision as of 20:34, 5 October 2011
This resource provides the ability to manage packages using the REST API.
- Learn more: REST API Conventions and Considerations.
Permissions
__TBD: Are the permission(s) right?__ -- check Administrative Permissions for a list of possibilities
- Develop Tools permission must be enabled for the tenant.
Users that have the Access Control/User Management permission can use this resource.
Users that have the Manage Develop Features permission can use this resource.
List All __resourceName__ (Record)s
("Get" if complete records are returned. "List" if partial data is returned, requiring a second read to get a complete set of data. This comes before the GET, because typically it's called first to get the ID used in a specific-record GET.)
- Method
- GET
- URI
- https://{domain}/networking/rest/__resourceName__
- Return all fields
- URI
- https://{domain}/networking/rest/__resourceName__?{query_parameters}
- Query Parameters
- Introductory sentence, if any
- parameter1 - Description
- parameter2
- If TRUE, ...
- If FALSE, ...
- For more information, see: Specifying Query Parameters in REST APIs
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<__resourceName__> <id>...</id> <field>data</field> ... </__resourceName__>
<__resourceName__> ... </__resourceName__>
...
<message>
0
<description>Success</description>
</message>
<recordCount>N</recordCount>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Get a __resourceName__ Record
- Method
- GET
- URI
- https://{domain}/networking/rest/__resourceName__/{recordId}
- Return all fields
- URI
- https://{domain}/networking/rest/__resourceName__/{recordId}?{query_parameters}
- Query Parameters
- Introductory sentence, if any
- parameter1 - Description
- parameter2
- If true, ...
- If false, ... (default)
- For more information, see: Specifying Query Parameters in REST APIs
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<__resourceName__> <id>...</id> <field>data</field> ... </__resourceName__>
<message>
0
<description>Success</description>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Add a __resourceName__ Record
- Method
- POST
- URI
- https://{domain}/networking/rest/__resourceName__
- Request
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<__resourceName__> <field>data</field> ... </__resourceName__>
</platform> </syntaxhighlight>
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<message>
0
<description>Success</description>
<id>...</id>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Update a __resourceName__ Record
- Method
- PUT
- URI
- https://{domain}/networking/rest/__resourceName__/{recordId}
- Request
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<__resourceName__> <id>{recordId}</id> ... </__resourceName__>
</platform> </syntaxhighlight>
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<message>
0
<description>Success</description>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Delete a __resourceName__ Record
- Method
- DELETE
- URI
- https://{domain}/networking/rest/__resourceName__/{recordId}
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<message>
0
<description>Success</description>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Subscribe to a Package
Use this resource to install a Package.
Users that have the Manage Packages permission can use this resource.
- Method
- POST
- URI
- https://{domain}/networking/rest/package/operation/subscribe?{query_parameters}
- Query Parameters
- packageId - This is the package installation ID -- the value that appears as the id value in the Installation Link part of the Package page.
- fileName - The path to the package file, when subscribing to a downloaded copy of the package. (Install from File tenant capability must be enabled to use this option.)
- For more information, see: Specifying Query Parameters in REST APIs
- Examples
-
- Subscribe from repository:
- Subscribe from repository, specifying a version number:
- Subscribe from a file:
- Subscribe from repository:
- Response
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<message>
0
<description>Success</description>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Sample Package Subscribe Client
The PackageSubscribeClient demo program extends the REST API:BaseClient class to subscribe to a package file (a zip file downloaded from the platform). With minor modifications, it can be used to subscribe to a package hosted on the platform.
- <syntaxhighlight lang="java" enclose="div" style="overflow: auto">
package demo.rest;
import java.io.File;
import javax.ws.rs.core.MediaType;
import org.apache.wink.client.ClientResponse; import org.apache.wink.client.ClientWebException; import org.apache.wink.client.Resource; import org.apache.wink.common.internal.utils.MediaTypeUtils;
/**
* "Subscribe" to (install or update) a package contained in a zip file. * This program extends demo.rest.BaseClient.java * which in turn makes use of demo.rest.BaseUtil.java to handle * logging in, logging out, and message formatting. */
public class PackageSubscribeClient extends BaseClient {
public static void main(String[] args) { String packageUrl = baseUrl + "/package/operation/subscribe" + "?fileName=orders.zip"; // Subscribe from a file File f = new File("c:\\orders.zip");
//Other options: // + "?packageId=123123123"; // Subscribe from platform // + "?packageId=123123123&version=1.2"; // Specify version
// Instantiate BaseClient.client and get sessionId PackageSubscribeClient subscribeClient = new PackageSubscribeClient(); cookieString = subscribeClient.login(); try { Resource resource = getResource(packageUrl); resource.header("Cookie", cookieString);
ClientResponse response = resource.contentType(MediaTypeUtils.ZIP).accept( MediaType.APPLICATION_XML).post(ClientResponse.class, f); String responseXml = response.getEntity(String.class); echoResponse(responseXml); } catch (ClientWebException webException) { echoResponse(webException); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } finally { client.logout(); } }
} </syntaxhighlight>
Download a Package
Download a package as a zip file.
Users that have the Manage Packages permission can use this resource.
- Method
- POST
- URI
- https://{domain}/networking/rest/package/operation/download/{package_id}?{query_parameters}
- where:
- package_id - Is the package record ID - the value at the top of the Package page.
- Query Parameters
- lastPublishedVersion
- If TRUE, the package downloaded will be the last published version. (Default) If the package has never been published, it will be published first, so that it can be downloaded.
- If FALSE, the package will be re-assembled/re-created, and this version will include all changes made to the components, from the last package publish date. (If any components of the package have been checked out, the request returns an Error.)
- For more information, see: Specifying Query Parameters in REST APIs
- Response
The response is of type multipart/mixed.
- On success it will contain two parts which look something like this
- <syntaxhighlight lang="xml" enclose="div">
103832778631715
content-type: application/xml
<platform>
<message>
0
<description>Success</description>
</message>
</platform>
103832778631715
content-type: application/octet-stream
Encoded file part
103832778631715--
</syntaxhighlight>
- On failure it will contain just a single part which looks something like this
- <syntaxhighlight lang="xml" enclose="div">
103832778631715
content-type: application/xml
<platform>
<message>
0
<description>Success</description>
</message>
</platform>
103832778631715--
</syntaxhighlight>
- See also: REST API Error Codes
Sample Package Download Client Program
The PackageDownloadClient demo program extends the REST API:BaseClient class to download a package from the platform to your local system.
- <syntaxhighlight lang="java" enclose="div" style="overflow: auto">
package demo.rest;
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.regex.Matcher; import java.util.regex.Pattern;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap;
import org.apache.wink.client.ClientResponse; import org.apache.wink.client.ClientWebException; import org.apache.wink.client.Resource; import org.apache.wink.common.internal.utils.MediaTypeUtils; import org.apache.wink.common.model.multipart.InMultiPart; import org.apache.wink.common.model.multipart.InPart;
/**
* Download a package from the platform to the local system. * This program extends demo.rest.BaseClient.java * which in turn makes use of demo.rest.BaseUtil.java to handle * logging in, logging out, and message formatting. */
public class PackageDownloadClient extends BaseClient {
public static void main(String[] args) { // packageId is the unique id associated with the package. // Get it from the platform UI while viewing a package. String packageId = "761fb822e95d48c498d4c4f97dd1470b"; String lastPublishedVersion="true"; String downloadPackageUrl = baseUrl + "/package/operation/download/" + packageId+"?lastPublishedVersion="+lastPublishedVersion;
// Instantiate BaseClient.client and get sessionId PackageDownloadClient client = new PackageDownloadClient(); cookieString = client.login(); try { Resource resource = getResource(downloadPackageUrl); resource.header("Cookie", cookieString);
ClientResponse response = resource.accept(MediaTypeUtils.MULTIPART_MIXED).post( ClientResponse.class, "");
InMultiPart iMultiPart = response.getEntity(InMultiPart.class);
while (iMultiPart.hasNext()) { InPart iPart = iMultiPart.next(); String contentType = iPart.getContentType(); if (contentType.contains(MediaType.APPLICATION_XML)) { InputStream ips = iPart.getInputStream(); echoResponse(ips); } else if (contentType.contains(MediaType.APPLICATION_OCTET_STREAM)) { MultivaluedMap<String, String> headers = iPart.getHeaders(); String cDHeader = headers.getFirst("Content-Disposition");
String fileName = ""; Pattern p = Pattern.compile("filename=.*"); Matcher m = p.matcher(cDHeader); if (m.find()) { fileName = m.group(); }
fileName = fileName.replace("filename=", ""); File packageZipFile = new File("c:\\" + fileName); FileOutputStream fos = null; fos = new FileOutputStream(packageZipFile);
InputStream is = iPart.getInputStream(); int size = 0; int i = 0; byte[] ba = new byte[8196]; while ((i = is.read(ba)) != -1) { fos.write(ba, 0, i); size += i; } fos.close(); System.out.println("Package downloaded to " + packageZipFile.getAbsolutePath()); } else { System.out.println("Unrecognized media type: " + contentType); } } } catch (ClientWebException webException) { echoResponse(webException); } catch (IOException io) { io.printStackTrace(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } finally { client.logout(); } }
}
</syntaxhighlight>
Deploy a Package
Deploy a package to a list of tenants, where both the package to deploy and the tenant list are specified in the request.
Users that have the Manage Packages permission can use this resource, and Mass Deployment of Packages to Tenants must be enabled for the publishing tenant.
- Method
- POST
- URI
- https://{domain}/networking/rest/package/operation/deploy
- Request
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<package> <id>123123123</id> --package installation ID <deployConfiguration> <tenantList> <tenantId>1214573329</tenantId> <tenantId>1224242818</tenantId> ... </tenantList> <notifyTenants>false</notifyTenants> <deployTime>0</deployTime> </deployConfiguration> </package>
</platform> </syntaxhighlight>
- Response
Returns the id of the submitted import job, along with a message telling whether or not the job was accepted for processing. (Use the REST packageDeploy Status resource to follow the progress of the job.)
- <syntaxhighlight lang="xml" enclose="div">
<platform>
<message>
0
<description>Success</description>
<id>...</id>
</message>
</platform> </syntaxhighlight>
- See also: REST API:Error Codes
Fields
- package
Name Type Required on Add Description Additional Info id String The package installation ID The value that appears as the id value in the Installation Link part of the Package page.
- deployConfiguration
Name Type Required on Add Description Additional Info tenantList List List of tenants to deploy the package to notifyTenants Boolean If true, send a message to notify tenants about package deployment deployTime Date Deployment date/time
0=Deploy immediatelyUTC Format
- tenantList
Name Type Required on Add Description Additional Info tenantId String Tenant ID