WebAPI/SimplePush: Difference between revisions
| Line 195: | Line 195: | ||
{} | {} | ||
==== PUT | ==== PUT /update/<ChannelID> ==== | ||
Update the version of a given channel. | Update the version of a given channel. | ||
Revision as of 01:30, 11 December 2012
Client Side API
partial interface Navigator {
PushNotification pushNotification;
};
interface PushNotification : EventTarget {
// registers to receive push notifications for a given topic
// DOMRequest.result is a PushRegistration in case of success
DOMRequest register(DOMString topic);
// registers to stop receiving push notifications for a given topic
// DOMRequest.result is a PushRegistration in case of success
DOMRequest unregister(DOMString topic);
// returns the list of all push registrations for this origin
PushRegistration[] registered();
// event MUST be of type PushEvent
attribute EventHandler onmessage;
};
interface PushRegistration {
// this is the string that was used when calling register()
DOMString topic;
// this is the URL to which push notifications from the web application
// must be sent to.
// application should send this and pushRequestID as a pair to the
// application server
DOMString pushEndpoint;
// this is the push request id that must be sent to the push server with
// every push notification update
DOMString pushRequestID;
};
interface PushEvent : Event {
// this is topic string used when registering for push notifications
DOMString topic;
// this is the most current version
unsigned long long version;
}
Client Example
// all notifications will be sent to the system message handler.
// which is up to the U/A to implement
// apps can do something like
navigator.pushNotification.onmessage = function(e) {
e.topic == This is the topic that is being observed
e.version == This is the current version for this topic
});
// to register to listen for a notification,
// you simply call push.register and pass a
// topic of interest:
var req = navigator.pushNotifications.register("topic");
// success callback
req.onsuccess(e) = function() {
// post to application server
e.target.result.pushEndpoint
e.target.result.pushRequestID
}
req.onerror() = function(e) {}
// to unregister, you simply call..
req = navigator.pushNotifications.unregister("topic");
req.onsuccess() = function() {}
req.onerror() = function() {}
Server API
Definitions
- UserAgent
- The client acting on behalf of the user and consumer of update notices
- UAID
- A server generated, globally unique UserAgent ID
- PushServer
- The server managing interactions between AppServers and the UserAgent
- AppServer
- The third party publisher of update notices
- Channel
- The flow of information from AppServer through PushServer to UserAgent
- ChannelID
- Globally Unique identifier for a Channel
UserAgent and AppServer will use a RESTful API to interact with the Push Server.
API
- Requests from UserAgent to PushServer MUST provide a PushServer Generated UserAgentID (UAID) as the "X-UserAgent-ID" header.
- UserAgent requests may include a /{network} prefix to indicate a request may be handled by a third party network
(e.g. GET http:host/foonet/update will return update requests for elements provided by the "foonet" sub-provider.
- Calls will return standard HTTP status headers.
- Calls will return status 200 (unless otherwise noted below).
- On Errors, calls will return a proper error code, and where permitted, a standard JSON block containing information regarding the error. The contents of this block are not intended for end user display and have yet to be finalized.
POST /register
Request a new ChannelID.
If the X-UserAgent-ID is not provided, the UserAgent is presumed to be new and a new UserAgentID will be generated for the UserAgent.
Arguments
No additional arguments are required.
Return Value
{ "channelID": "New Channel ID",
"uaid": "UserAgent ID"
}
NOTE: The uaid is either the X-UserAgent-ID value echoed back, or a new X-UserAgent-ID value to be used for all subsequent calls if no X-UserAgent-ID was present.
Example
GET http://push.m.o/register --- {"channelID": "foo1234", "uaid": "bar5678"}
DELETE /<ChannelID>
Delete an associated ChannelID. Subsequent calls to this ChannelID will result in a 404 status.
NOTE: the X-UserAgent-ID Header must be present and match the one associated with this ChannelID
Arguments
There are no arguments for this call.
Returns
This returns an empty JSON object
{}
Example
DELETE http://push.m.o/delete/foo1234 --- {}
GET /update
Return a list of known ChannelIDs and current versions.
NOTE: the X-UserAgent-ID must be provided and match the value returned by the /register call.
Arguments
There are no arguments for this call.
Returns
This will return a hash containing a list of hashes defining the known, associated Channels and versions.
NOTE: If the server is unable to determine previous data for this X-UserAgent-ID, it will return a 410.
See POST /update for details.
Example
GET http://push.m.o/update --- {"channels":[{"foo1234","1.2"},{"gorp789","20121210164802-a"}]}
POST /update
Refresh the server from the client.
This request requires a X-UserAgent-ID header. If the UserAgent attempts to POST information to the server which already has data for that X-UserAgent-ID, the server will deny the request with a 403 error. In that case, the UserAgent should request re-registration for all Channels.
Arguments
The POST body is a JSON encoded block which matches the form and structure of the GET /update/ request.
Returns
This will return an empty object.
Example
POST http://push.m.o/update {"channels":[{"foo1234","1.2"},{"gorp789","20121210164802-a"}]} --- {}
PUT /update/<ChannelID>
Update the version of a given channel.
Arguments should be passed as standard form data (enctype: multipart/form-data) This call does not require a X-UserAgent-ID, as it may be called by the AppServer.
Arguments
version=<version>
The version is the AppServer specific VersionID to use. This ID is opaque to the PushServer, however it is suggested that:
- The ID be sequential.
- The ID be less than 100 characters.
- The ID should be UTF8 compliant.
Returns
This call returns an empty JSON object.
Example
PUT http://push.m.o/update/foo1234 version=1.3 --- {}