ClickPackageIndex

Revision 9 as of 2013-06-27 11:37:59

Clear message

Click Package Index

Contact: James Tait (JamesTait)

  • Solr-backed repository for Click Application metadata
  • Public front-end will serve as access control, apply sane defaults and massage request and response for ease of use.
  • Interfaces with:
    • Software Centre Agent
      • App developer defines app in Software Centre website
      • App developer uploads packaged app
      • Software Centre Agent pushes metadata to Click Package Index
        • First iteration, metadata is entered by developer
        • Later to be harvested from Click Manifest
    • Dash
      • "Surfacing", i.e. first view of app lens before querying
      • "Search", i.e. list of apps that match search criteria
      • "Detail", i.e. full metadata for a given app

Solr Schema

Field Types

Name

Class

Notes

string

solr.StrField

Untokenized text.

boolean

solr.BoolField

True or False.

float

solr.TrieFloatField

Floating point number.

long

solr.TrieLongField

Long integer.

date

solr.TrieDateField

Date of the format "YYYY-MM-DDThh24:mm:ss[.nnn]Z"

url

solr.StrField

Untokenized text.

text_general

solr.TextField

Tokenized text. Reasonable cross-language defaults. StandardTokenizer, case-insensitive stop words, and down-casing. Query-time synonyms.

text_en

solr.TextField

English-language tokenized text. StandardTokenizer, case-insensitive stop words, down-casing, protected words and minimal stemming. Query-time synonyms.

key_value

solr.TextField

Key-value pair, i.e. "key|value".

Fields

Name

Type

Multi-value

Searchable

Retrievable

Required

Unique

Translatable

id

string

false

true

true

true

true

false

title

text_en

false

true

true

true

false

true

description

text_en

false

true

true

true

false

true

price

float

false

true

true

false

false

true (currencies)

package_name

text_general

false

true

true

true

true

false

binary_filesize

long

false

false

true

false

false

false

icon_url

url

false

false

true

false

false

false

icon_urls

payloads

true

true

true

false

false

false

screenshot_url

url

false

false

true

false

false

false

screenshot_urls

url

true

false

true

false

false

false

terms_of_service

text_en

false

false

true

false

false

true

support_url

url

false

false

true

false

false

true

license

text_general

false

true

true

true

false

false

date_published

date

false

true

true

false

false

false

video_urls

url

true

false

true

false

false

false

license_key_path

string

false

false

true

false

false

false

requires_license_key

boolean

false

true

true

false

false

false

version

string

false

true

true

true

false

false

website

url

false

false

true

false

false

true

company_name

text_general

false

true

true

false

false

false

keywords

text_en

true

true

true

false

false

true

click_version

string

false

true

true

true

false

false

click_framework

string

true

true

true

true

false

false

click_updown_url

url

false

false

true

true

false

false

countries_to_distribute

string

true

true

false

false

false

false

text

text_en

true

true

false

false

false

true

API

Guiding principles:

  • JSON-based
  • Discoverable
  • Browseable

API Root

/api/v1

Provides clickable links to the other endpoints for discoverability.

Request

GET /api/v1 HTTP/1.1
Host: search.apps.ubuntu.com

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
    "search": "http://search.apps.ubuntu.com/api/v1/search",
    "package": "http://search.apps.ubuntu.com/api/v1/package"
}

/api/v1/search

Proxies requests to Solr's SearchHandler. A subset of the standard Solr syntax is used for querying.

Request

GET /api/v1/search?q=click_framework:ubuntu-sdk-13.10,description:awesome&wt=json&fl=id,title,description,price,icon_url HTTP/1.1
Host: search.apps.ubuntu.com

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "fl": "id,title,description,price,icon_url",
      "indent":"on",
      "start":"0",
      "q":"click_framework:ubuntu-sdk-13.10,description:awesome",
      "wt":"json",
      "version":"2.2",
      "rows":"10"
    }
  },
  "response":{
    "numFound":2,
    "start":0,
    "docs":[
      {
        "id": "1",
        "title": "Awesome Launcher",
        "description": "This is an awesome launcher.",
        "price": 1.99,
        "icon_url": "http://example.org/media/awesomelauncher/icons/icon16.png",
        "resource_url": "http://search.apps.ubuntu.com/api/v1/package/1"
      },
      {
        "id": "2",
        "title": "Awesome Widget",
        "description": "This is an awesome widget.",
        "price": 1.99,
        "icon_url": "http://example.org/media/awesomewidget/icons/icon16.png",
        "resource_url": "http://search.apps.ubuntu.com/api/v1/package/2"
      }
    ]
  }
}

Details

/api/v1/package

Requests details for a specific package. Cleans the query string to ensure the user cannot be tricked into installing the wrong package, and enforces a single item in the response.

Request

GET /api/v1/package/2?wt=json&fl=id,title,description,price,icon_url HTTP/1.1
Host: search.apps.ubuntu.com

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "fl": "id,title,description,price,icon_url",
      "indent":"on",
      "start":"0",
      "q":"id:2",
      "wt":"json",
      "version":"2.2",
      "rows":"1"
    }
  },
  "response":{
    "numFound":1,
    "start":0,
    "docs":[
      {
        "id": "2",
        "title": "Awesome Widget",
        "description": "This is an awesome widget.",
        "price": 1.99,
        "icon_url": "http://example.org/media/awesomewidget/icons/icon16.png",
      }
    ]
  }
}