Application Packaging Standard

Last updated 18-Mar-2019

Packages

APS controller keeps track of all imported APS packages. It is possible to list and find packages as well as access any file in a package. The package library is available through the /aps/2/packages collection on the APS controller.

Getting Package List

To get a list of packages imported to the APS controller, the GET request must be sent to the package collection as in the following example:

GET /aps/2/packages
Content-Type: application/json

Sample response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Range: items 0-99/100

[
     {
        "aps": {
           "id": "b096f82a-a83f-44f5-8599-1e61173e9f72",
           "href": "/aps/2/packages/b096f82a-a83f-44f5-8599-1e61173e9f72"
        },
        "apsVersion": "2.0",
        "id": "http://aps-standard.org/samples/suwizard1p",
        "name": "User Management Demo",
        "version": "1.0",
        "release": "0",
        "services": {
           "clouds": {...},
           "contexts": {...},
           "vpses": {...},
           "offers": {...}
        }
     },
        ...
]

Very often, it is unnecessary to get all package details in the list of packages. Normally, the list of package IDs is quite enough, as it allows the application or the system to further request needed details from certain packages. This saves a lot of time and increases the overall performance. The following Resource Query Language (RQL) functions help you achieve the goal.

  • The select(aps.id) function allows you to request only package APS IDs.

    Note

    In case of packages, no other input arguments, except for aps.id, are accepted as the latter is the only mandatory property in all packages.

  • The active() RQL function applicable to the /aps/2/packages collection selects only active packages.

For example, the following is a request for APS IDs of all active packages:

GET /aps/2/packages?active(),select(aps.id)

Getting Package Details

It is possible to get package {package-id} data by sending a GET request to /aps/2/packages/{package-id} using one of content types, either application/json (default) or application/aps. The required content type is specified in the Accept header.

When using the default Accept: application/json header, the APS controller returns the JSON representation of the requested package.

Sample request:

GET /aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978
Accept: application/json

Sample response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

{
   "aps":
   {
      "id": "d3ad0a6b-69f1-476f-8aba-cfa72c385978",
      "href": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978"
   },
   "apsVersion": "2.0",
   "id": "http://event-mgmt.demo.apsdemo.org/vpsclouds",
   "name": "VPS Cloud Event Processing",
   "version": "1.0",
   "release": "1",
   "services":
   {
      "clouds":
      {
         "type": "http://event-mgmt.demo.apsdemo.org/vpsclouds/clouds/1.0",
         "schema": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978/schemas/clouds.schema.gen",
         "name": "clouds",
         "summary": "VPS cloud application global service"
      },
      "offers":
      {
         "type": "http://event-mgmt.demo.apsdemo.org/vpsclouds/offers/1.0",
         "schema": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978/schemas/offers.schema.gen",
         "name": "offers",
         "summary": "Set of VPS parameters"
      },
      "contexts":
      {
         "type": "http://event-mgmt.demo.apsdemo.org/vpsclouds/contexts/1.0",
         "schema": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978/schemas/contexts.schema.gen",
         "name": "contexts",
         "summary": "VPS management environment"
      },
      "vpses":
      {
         "type": "http://event-mgmt.demo.apsdemo.org/vpsclouds/vpses/1.0",
         "schema": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978/schemas/vpses.schema.gen",
         "name": "vpses",
         "summary": "Cloud virtual private server"
      },
      "events":
      {
         "type": "http://event-mgmt.demo.apsdemo.org/vpsclouds/events/1.0",
         "schema": "/aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978/schemas/events.schema.gen",
         "name": "events",
         "summary": "Processing event notifications"
      }
   }
}

When using the Accept: application/aps header, the APS controller returns the zipped APS package.

Sample request:

GET /aps/2/packages/d3ad0a6b-69f1-476f-8aba-cfa72c385978
Accept: application/aps

Sample response:

HTTP/1.1 200 OK
Content-Length: 350401
Content-Type: application/aps
Content-Disposition: attachment; filename="VPS Cloud Event Processing-1.0-1.aps"

... /* binary data */ ...

Getting Package Meta

If APS controller receives a GET request addressed to /aps/2/packages/{id}/APP-META.xml, it returns the APP-META.xml file contents.

Sample request:

GET /aps/2/packages/6e3c3164-d36e-4c63-9b43-d758c1a0acb6/APP-META.xml
Accept: application/xml

Sample response:

HTTP/1.1 200 OK
Content-Type: application/xml

<application xmlns="http://aps-standard.org/ns/2" packaged="2012-11-15T13:11:37" version="2.0">
    <id>http://wordpress.org/2.0</id>
    <name>WordPress</name>
    <version>3.4.2</version>
    <release>2.0.6</release>
    <homepage>http://wordpress.org/</homepage>
    ...
</application>

Getting File from Package

Similarly, it is possible to get contents of any file from package {id}.

Sample request:

GET /aps/2/packages/b096f82a-a83f-44f5-8599-1e61173e9f72/schemas/vpses.schema.gen
Accept: application/json

Sample response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

// This file is generated by 'aps build' from 'scripts/vpses.php' script
// It will be regenerated next time 'aps build' command is executed
{
    "apsVersion": "2.0",
    "name": "vps",
    "id": "http://aps-standard.org/samples/suwizard1p/vps/1.0",
    "implements": [
        "http://aps-standard.org/types/core/user/service/1.0"
    ],
     ...
 }
Types