Difference between revisions of "Sugar Network/API"
Line 81: | Line 81: | ||
:* {{Code|properties}}, ''str''<br>coma separated list of ''RESOURCE'' properties to return; by default, return only {{Code|guid}} property; | :* {{Code|properties}}, ''str''<br>coma separated list of ''RESOURCE'' properties to return; by default, return only {{Code|guid}} property; | ||
:* {{Code|order_by}}, ''str''<br>coma separated list of ''RESOURCE'' properties to sort the resulting list; if an property starts with the {{Code|-}}, the order is descending, otherwise it is ascending; | :* {{Code|order_by}}, ''str''<br>coma separated list of ''RESOURCE'' properties to sort the resulting list; if an property starts with the {{Code|-}}, the order is descending, otherwise it is ascending; | ||
− | :* {{Code|group_by}}, ''str''<br>a property name to group resulting list by; if was specified, every resulting list item will contain {{Code| | + | :* {{Code|group_by}}, ''str''<br>a property name to group resulting list by; if was specified, every resulting list item will contain {{Code|grouped}} key with a number of entries that are represented by the current one. |
Sends: | Sends: |
Revision as of 13:32, 24 December 2011
This page describes the APi that Sugar Network clients use to interact with Sugar Network server. See also technical introduction page.
Overview
The API operates with resources that are collections of objects. All objects are identified by global unique identifiers, GUIDs. Resources might support common actions. While processing requests, server might generate events. There are common events that all resources might generate.
The API is RESTful and being served via HTTP(S) using JSON notation. The common RESTful request url format is:
http[s]://<SERVER>/<RESOURCE>[/<GUID|ACTION>[/<ACTION>]]?<AUTH-TOKEN>=<>[&<ARG>=<>]..]
When:
- RESOURCE value is one of existing resources;
- GUID, the RESOURCE's particular object;
- ACTION and a set of ARGs depend on particular RESOURCE.
Besides, particular request can send and receive data in JSON notation. If request processing was failed, the reply is a JSON directory that contains error
key with error message.
For the beginning, API is not secure for reasons:
- Implement initial version in short period of time;
- The only users, for the beginning, are teachers and students from one-teacher off-line schools.
In particular:
- API is being provided only via HTTP;
- The AUTH-TOKEN is the
uid
which is a hashed value from Sugar profile public SSH key (the same as JID value in Sugar Shell but without the domain part) that does not require any handshake procedures.
Commons
Properties
All resources have the following properties:
guid
, guid
the global unique identifier of the object;ctime
, int
the UNIX seconds in UTC timezone of the time when object was created; optional, will be set on a server side otherwise;mtime
, int
the UNIX seconds in UTC timezone of the time when object was modified; optional, will be set on a server side otherwise;creator
, guid, read
the player who created the object.
Resources that can be voted (everything except player, report, comment and event), have these additional properties:
respect
, guid, read, create
what player needs to be respected on getting vote to this object, if empty, the associated project itself will be voted.
And calculated ones:
reputation
, int, read
current object's reputation;vote
, bool, read, write
did url requester voted for the current object or not.
Actions
Actions might be restricted for particular resource, see the corresponding section for detailed information.
POST /<RESOURCE>
Create new RESOURCE object.
Sends:
- Resource properties.
Receives:
guid
, str
globally unique identifier that specifies created object;
PUT /<RESOURCE>/<GUID>
Modify the specified RESOURCE object. By default, might be called only by RESOURCE creator.
Sends:
- Keys that need to be modified.
DELETE /<RESOURCE>/<GUID>
Delete the specified RESOURCE object. The real destroying won't happen, the object will be hidden. The garbage collection of hidden objects will be processed by Network administrators. By default, might be called only by RESOURCE creator.
GET /<RESOURCE>?offset=<>&limit=<>[&query=<>][&properties=<PROP>[,..]][&order_by=[+|-]<PROP>[,..]][&group_by=<PROP>]
Find RESOURCE objects.
Where:
offset
, int
start index to return entries from;limit
, int
do not return more then specified value;query
, str
search request in Xapian notation;properties
, str
coma separated list of RESOURCE properties to return; by default, return onlyguid
property;order_by
, str
coma separated list of RESOURCE properties to sort the resulting list; if an property starts with the-
, the order is descending, otherwise it is ascending;group_by
, str
a property name to group resulting list by; if was specified, every resulting list item will containgrouped
key with a number of entries that are represented by the current one.
Sends:
- A dictionary with RESOURCE's properties to restrict the resulting list.
Receives:
- An array of dictionaries with RESOURCE properties, dictionaries contain at least
guid
property.
- An array of dictionaries with RESOURCE properties, dictionaries contain at least
GET /<RESOURCE>/<GUID>[?properties=<PROP>[,..]]
Return RESOURCE properties the of particular object.
Where:
properties
, str
coma separated list of RESOURCE properties to return; by default, return all properties.
Receives:
- A dictionary with RESOURCE properties that contains at least
guid
property.
- A dictionary with RESOURCE properties that contains at least
Wiki actions
Some of resources have Wiki pages associated. The following actions can be used to manage these Wiki pages.
GET /<RESOURCE>/<GUID>/wikitext
Get the Wiki sources.
Receives:
- Wiki sources with text/plain MIME type.
GET /<RESOURCE>/<GUID>/rendered_wikitext
Get the Wiki rendered to HTML.
Receives:
- Rendered Wiki with text/html MIME type.
PUT /<RESOURCE>/<GUID>/wikitext
Put new content for Wiki page. Only object creator can use it.
Sends:
- Wiki sources with text/plain MIME type.
Events:
type: update
Events
All events have the following common properties:
type
, str
the type of event;timestamp
, int
the UNIX seconds in UTC timezone of the time when event was created;resource
, str
the name of affected resource;object
, guid
the GUID of affected resource object;creator
the GUID of a player the event was created on behalf of.
Different types of events might add new options.
There are the following common event types:
- The particular resource was created:
type: create
- The particular resource properties were modified:
type: update
- The particular resource was deleted (hidden):
type: delete
Resources
player
Properties:
nickname
, str, read
set by Sugar Shell;color
, str, read
colors pair in format#RRGGBB,#RRGGBB
, set by Sugar Shell.
Calculated properties:
reputation
, int, read
current player's reputation based on:- direct votes from other players,
- votes given to objects where the player is a creator;
vote
, bool, read, write
did url requester voted for the current object or not;
Actions:
- player cannot be created or destroyed;
- player can be updated only by a user who is associated with it.
POST /player/<GUID>/message
Send private message to the player.
Sends:
- A dictionary with event properties.
Events:
- Direct event to the player:
type: message
.
project
Properties:
title
, str, read, write only for the team members
one line title;
description;
type
, str, read, write only for the team members
the project type:general
,activity
,wiki
,gallery
;
zoom
, str, read, write only for the team members
Network Zoom level that project belongs:worldwide
,neighbourhood
,private
.
Calculated properties:
reputation
, int, read
current project's reputation based on:- direct votes from other players,
- votes given to related objects if theirs respect property is empty;
vote
, bool, read, write
did url requester voted for the current object or not.
Actions:
- right after creation, the creator will be the only team member;
- update and delete actions are allowed only for team members;
- Wiki related actions to manage object description.
POST /project/<GUID/add_member?member=<PLAYER>
Make a PLAYER the team member. Only team members can call this action.
Events:
type: add_member
;memeber: GUID
.
POST /project/GUID/remove_member?member=<PLAYER>
Remove PLAYER from the to the team. Only team member can call this action if he is not the PLAYER and PLAYER is not the same as creator.
Events:
type: remove_member
;memeber: GUID
.
question
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for creator
one line title;solution
, guid, read, write only by creator
the solution which solves the object.
Calculated properties:
implementation_status
, str, read
if question has an associated objective, this objective's status is a status of the question, otherwise the property is empty.
Actions:
- Wiki related actions to manage object description.
idea
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for creator
one line title.
Calculated properties:
implementation_status
, str, read
if idea has an associated objective, this objective's status is a status of the idea, otherwise the property is empty.
Actions:
- Wiki related actions to manage object description.
problem
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for creator
one line title;solution
, guid, read, write only by creator
the solution which solves the object.
Calculated properties:
implementation_status
, str, read
if problem has an associated objective, this objective's status is a status of the problem, otherwise the property is empty.
Actions:
- Wiki related actions to manage object description.
wiki
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for creator
one line title.
Actions:
- Wiki related actions to manage Wiki page.
gallery
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for creator
one line title.
Actions:
- Wiki related actions to manage object description.
GET /gallery/<GUID>/exhibit
Get the attached object.
Receives:
- Attached object content with application/octet-stream MIME type.
PUT /gallery/<GUID>/exhibit
Put new attached object. Only object creator can use it.
Sends:
- Attached object content with application/octet-stream MIME type.
Events:
type: update
objective
Properties:
project
, guid, read
the project this object belongs to;title
, str, read, write only for the team members
one line title.
Actions:
- Wiki related actions to manage object description.
release
Properties:
project
, guid, read
the project this object belongs to;version
, str, read
release version;stability
, str, read
release stability level, the same as for Zero Install/Sweets.
Actions:
- Wiki related actions to manage release notes.
report
Properties:
release
, guid, read
the release this object belongs to.
Actions:
- Only read-only common actions.
PUT /report/<GUID>/logs
Attach logs to the report.
Sends:
- Attached logs with application/octet-stream MIME type.
Events:
type: update
GET /report/<GUID>/logs
Get report attached logs.
Receives:
- Attached logs with application/octet-stream MIME type.
solution
The solution for question/idea/problem objects.
Properties:
resource
, str, read
the type of resource this solution is for;object
, guid, read
the resource object this solution is for.
Actions:
- Wiki related actions to manage object description.
comment
Properties:
resource
, str, read
the type of resource this comment is about;object
, guid, read
the resource object this comment is about;text
, str, read, write only for creator
comment text.
event
Properties:
- No specific properties except the common ones.
Actions:
- Only read-only common actions.
Getting involved
- Submit your bug report or feature request.
- Browse our implementation discussions, and post your feedback. (You should join this discussion list in order to avoid having your messages postponed for moderation.)
Changelog
This section shows how API is evolving. The API state is being described by a version. The major number is being changed only if backwards compatibility was broken.
1.0
- Not yet released API.