API Description

Author:Stefan Eletzhofer
Date:July 03, 2015
State:production

Abstract

This is a description of the file service.

Purpose

The purpose of the file service is to provide programmers a high-level api to Windchill content items of Windchill business objects.

URLs

The API may be accessed by using HTTP Requests to the following URLs.

Base URL

BASE URL:<<windchill host>>:<<port>>/<<web service>>/servlet/nexiles/tools/services/files

The URLs below need the base url prefixed – e.g. to fetch the version one would use a URL like:

http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/version

API URLs

The following URLs define the API to the file service:

URL Method Purpose
files/version GET plug-in version
files/:oid GET return list of files
files/:oid/:filename GET return file content
files/:oid/:filename POST create update a file
files/:oid/:filename DELETE delete a file

To provide a way to create stable links to files, we need a alternate way to refer to business objects. For this purpose we’ll use the number of business objects.

Note

When using numbers, the file service assumes WTDocument types.

API: Version

URL:files/version
method:GET

This fetches the version of the file service plug-in.

Data Format

The result of the HTTP GET is a JSON document, which has the following structure:

{
    version: "0.1dev",
    build: 4,
    date: "2013-04-15"
}

Example

Getting the plug-in version using CURL:

$ curl -q  --user nxoa:nxoa -X GET http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/version
{
  "version": "0.1dev",
  "build": 0,
  "date": "2013-04-04"
}

Using jQuery:

$.ajax({
    url: "/Windchill/servlet/nexiles/tools/services/files/version",
    context: document.body,
    success: function(data) {
        console.log("plug-in version" + data.version);
    }
});

API: File Listing

URL:files/
method:GET

The GET on for the list of files takes an optional role parameter, where role is the content role or all for all roles. The default is SECONDARY.

Example

http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber?role=all http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber?role=SECONDARY http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber?role=PRIMARY http://example.com/Windchill/servlet/nexiles/tools/services/files/OR:wt.doc.WTDocument:4711?role=all

Data Format

The result of the HTTP GET is a JSON document, which has the following structure:

{
    "count": <<number of files>>,
    "items": [
        {
            "url": <<url to file content>>,
            "role": <<content role>>
            "mimetype": <<the mime type of the file>>,
            "filename": <<the file name>>
            "size": <<the file size in bytes>>
        },
        ...
    ]
}

Examples

Using CURL:

curl -q  --user nxoa:nxoa -X GET http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/0000000001
{
  "_runtime": 0.04700016975402832,
  "count": 2,
  "items": [
    {
      "url": "http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/0000000001/latest-xkcd.png",
      "role": "SECONDARY",
      "filename": "latest-xkcd.png",
      "mimetype": "image/png",
      "size": 34230
    },
    {
      "url": "http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/0000000001/Minto-Pyramid-Principle.pdf",
      "role": "SECONDARY",
      "filename": "Minto-Pyramid-Principle.pdf",
      "mimetype": "application/pdf",
      "size": 666021
    }
  ]
}

Using jQuery:

$.ajax({
    url: "http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/0000000001",
    type: "GET"
}).done(function (data) {console.log("file list: " + data.items); });

API: Get File Content

URL:files/:oid_or_number/:filename
method:GET

Returns the file content of the named file.

Data Format

N/A – this request returns the raw bytes of the file.

Examples

http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber/afile.txt

or dynamically using jQuery:

$.ajax({
    url: "http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber/afile.txt",
    type: "GET"
}).done(function (data) {console.log("file data: " + data); });

Or by just using the URL in e.g. a IMG tag:

<img src="http://windchill.virtual.nexiles.com/Windchill/servlet/nexiles/tools/services/files/0000000001/latest-xkcd.png"
     alt="example" />

API: Create or update a file

URL:files/:oid_or_number/:filename
method:POST

To update a file, issue a HTTP POST request to the URL of the file. The content needs to be base64 encoded, the author uses https://github.com/carlo/jquery-base64 for that.

To create a new file, just do the same, inventing a new filename url.

POST Data Format

The POST body must be a JSON data structure with the following format:

{
    "data":         "<<data>>"
    "message":      "<< a check in message>>"
    "role":         "<<a winchill content role>>"
    "iterate":      True | False
}

The data supplied needs to be base64 encoded.

The role, iterate and message values my optionally specified as POST URL parameters.

data
default:none
required:yes

The base64 encoded data.

message
default:“update file ‘<<name>>’”
required:no

The message to use for the change made in the content holder. This message will show up in the standard Windchill UI.

role
default:“SECONDARY”
required:no

The content role to use. For a list of valid content roles consult the Windchill Sys Admin Guide. The most prominent ones are ‘PRIMARY’ and ‘SECONDARY’.

iterate
default:False
required:no

If true, a new iteration is made automatically.

Response Data Format

The response is a JSON encoded data structure with the following format:

{
    "success": true|false,
    "oid":  <<the (possibly new) OID>>,
    "url": <<the URL to the file download>>
}

Examples

Using CURL:

TBD

Using Python and the requests library:

TBD

Using jQuery – this assumes the base64 plugin for jQuery is installed:

var data = "file content";
$.ajax({
    url: "http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber/afile.txt",
    type:     "POST",
    dataType: "json",
    contentType: "application/json",
    data:     JSON.stringify({ data: $.base64.encode(data) })
}).done(alert("file updated"));

API: Delete a file

URL:files/:oid_or_number/:filename
method:DELETE

To delete a file, issue a HTTP DELETE request to the URL of the file.

Response Data Format

The response is a JSON encoded data structure with the following format:

{
    "success": true|false,
    "oid":  <<the (possibly new) OID>>,
    "url": <<the URL to the file list>>
}

Examples

Deleting a file using jQuery:

$.ajax({
    url: "http://example.com/Windchill/servlet/nexiles/tools/services/files/somenumber/afile.txt",
    type: "DELETE"
}).done(alert("file deleted"));