Server API design
Server is programmed with PHP and requires Apache with Rewrite module. Messaging to and from server is implemented with XML.
NOKKIS - http://url/nokkis
GET
Return list of events
(name, url)
Return format:
<nokkis>
<event id="1">
<name>Ropecon 2009</name>
<description>Roolipelit</description>
<startdate>1244620800</startdate>
<enddate>1244905200</enddate>
<num_tickets>123</num_tickets>
<max_tickets>500</max_tickets>
</event>
<event id="2">
<name>Assembly 2009</name>
....
</event>
....
</nokkis>
POST
<nokkis>
<event>
<name>Ropecon 2009</name>
<startdate>1122552</startdate>
<enddate>842222</enddate>
<max_tickets>3000</max_tickets>
<apikey>897cshdsd7f89</apikey>
<apikey>78v89sdhvsndd</apikey>
<apikey>978v8s6vysdhj</apikey>
</event>
</nokkis>
DELETE/PUT/POST
Not defined
CLIENT - http://url/nokkis/CLIENT/<apikey>
GET
Return valid client cache file. Includes all events and barcodes that use given apikey.
<nokkis>
<event id="1">
<name>Ropecon 2009</name>
<startdate>1234567890</startdate>
<enddate>1238600000</enddate>
<apikey>ABCDE12345</apikey>
<barcode key="983475629310">
<user>foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
<barcode key="983475629310">
<user id="1">foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
</event>
<event id="2">
...
<barcode key="983475629310">
...
</barcode>
</event>
</nokkis>
EVENT - http://url/nokkis/<event>
GET
Return event xml
(event real name, list of barcode ids, event start time, event end time, max tickets, list of apikeys)
Return format:
<nokkis>
<event id="1">
<name>Ropecon 2009</name>
<startdate>1122552</startdate>
<enddate>842222</enddate>
<num_tickets>123</num_tickets>
<max_tickets>3000</max_tickets>
<apikey>897cshdsd7f89</apikey>
<apikey>78v89sdhvsndd</apikey>
<apikey>978v8s6vysdhj</apikey>
</event>
</nokkis>
DELETE
Delete event
Delete event if there are no actions else invalidate.
Request format:
<nokkis> </nokkis>
Return format:
<nokkis> </nokkis>
POST
Not defined
PUT
(event real name, event start time, event end time, max tickets, list of apikeys)
Return event xml
Request format:
<nokkis>
<event>
<name>Ropecon 2009</name>
<startdate>1122552</startdate>
<enddate>842222</enddate>
<max_tickets>3000</max_tickets>
<apikey>897cshdsd7f89</apikey>
<apikey>78v89sdhvsndd</apikey>
<apikey>978v8s6vysdhj</apikey>
</event>
</nokkis>
Return format:
<nokkis> </nokkis>
Error more barcodes than new value of max tickets
EVENT_LOG - http://url/nokkis/<event>/LOG
GET
Return all modifications to event
Return format:
<nokkis>
<event id="1">
<action id="523456">
<ip>62.182.115.120</ip>
<action_time>1235553883</action_time>
<action_data>event_modified</action_data>
</action>
</event>
</nokkis>
PUT/POST/DELETE
Not defined
APIKEY - http://url/nokkis/KEY
GET
Return related xml
(list of all apikeys)
Return format:
<nokkis>
<apikey id="11111">
<event id="3">Ropecon 2009</event>
<event id="4">Assembly 2008</event>
<event id="5">Animecon 2009</event>
</apikey>
<apikey id="22222222222222">
<event id="5">Animecon 2009</event>
</apikey>
....
</nokkis>
APIKEY (BY EVENT) - http://url/nokkis/<event>/KEY/<key>
GET
Return related xml
(list of access using apikey)
Return format:
<nokkis>
<event id="873894792">
<apikey>897cshdsd7f89</apikey>
<apikey>78v89sdhvsndd</apikey>
<apikey>978v8s6vysdhj</apikey>
</event>
</nokkis>
PUT/POST/DELETE
Not defined
BARCODE - http://url/nokkis/<event>/BARCODE
POST
Create new barcode
Return new id
(owner identifier)
Request format:
<nokkis> </nokkis>
Return format:
<nokkis>
<barcode key="412158754" />
</nokkis>
or error
<nokkis>
<error id="41">Event full</error>
</nokkis>
GET
Get list of valid barcodes
Return format:
<nokkis>
<barcode key="983475629310">
<event id="1">Ropecon 2009</event>
<user>foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
</nokkis>
or:
<nokkis>
<event id="41215">
<barcode key="485736457367873289" />
<barcode key="788786878456363452" />
<barcode key="654654747560000111" />
<barcode key="109378663291111034" />
</event>
</nokkis>
PUT/DELETE
Not defined
BARCODE_BY_KEY - http://url/nokkis/<event>/barcode/<key>
GET
Return barcode data by id
Request format:
<nokkis> </nokkis>
Return format:
<nokkis>
<barcode key="83475629310710">
<event id="1">Ropecon 2009</event>
<user id="1">foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
</nokkis>
PUT
Use barcode
Return barcode data by id
Request format:
<nokkis> </nokkis>
Return format:
<nokkis>
<barcode key="98347562931071">
<event id="1">Ropecon 2009</event>
<user>foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
</nokkis>
POST
Not defined
DELETE
Return success
Invalidate key
Request format:
<nokkis> </nokkis>
Return format:
<nokkis> </nokkis>
BARCODE_LIST - http://url/nokkis/<event>/BARCODE/LIST/<start>(,<end>)
GET
Return barcodes between id <start> and <end>
<nokkis>
<barcode key="98347562931071">
<event id="1">Ropecon 2009</event>
<user id="1">foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
.....
<barcode key="432987432897">
<event id="1">Ropecon 2009</event>
<user id="1">foobar@helsinki.fi</user>
<status>1</status>
<valid>0</valid>
</barcode>
</nokkis>
POST/PUT/DELETE
Not defined
BARCODE_LOG - http://url/nokkis/<event>/BARCODE/LOG
GET
Return all event barcode actions
Request format:
<nokkis> </nokkis>
Return format:
<nokkis>
<event id="1">
<action id="0">
<barcode key="1234128" />
<apikey>82734728737</apikey>
<ip>62.182.115.120</ip>
<action_time>121</action_time>
<action_data>barcode_used</action_data>
</action>
....
<action id="89375">
<barcode key="29886360198278" />
<apikey>82734728737</apikey>
<ip>62.182.115.120</ip>
<action_time>12355538777</action_time>
<action_data>barcode_used</action_data>
</action>
</event>
</nokkis>
Returns all barcode actions in event
PUT/POST/DELETE
Not defined
Example xml:
BARCODE_ID_LOG - http://url/nokkis/<event>/BARCODE/LOG/<start>(,<end>)
GET
Return given barcode's actions
Request format:
<nokkis> </nokkis>
Return format:
<nokkis>
<event id="1">
<action id="50000">
<barcode key="99996360198278" />
<apikey>82734728737</apikey>
<ip>62.182.115.120</ip>
<action_time>128777</action_time>
<action_data>barcode_used</action_data>
</action>
<action id="89375">
<barcode key="29886360198278" />
<apikey>82734728737</apikey>
<ip>62.182.115.120</ip>
<action_time>12355538777</action_time>
<action_data>barcode_used</action_data>
</action>
</event>
</nokkis>
PUT/POST/DELETE
Not defined
Error-handling
- Command/event (error code): Explanation - All commands (1): Server couldn't connect to database - All commands (2): Internal database error - All commands (3): Invalid xml input - All commands (10): Insufficient privileges - All commands (11): Invalid apikey - EVENT PUT/POST (20): Invalid name - EVENT PUT/POST (21): End time before start time - EVENT GET/PUT/DELETE (22): Event doesn't exist - EVENT PUT/POST (23): Apikeys must be alphanumeric - EVENT GET (24): Event not found - APIKEY GET (30): Apikey not found - BARCODE GET & BARCODEBYKEY GET/PUT/DELETE (40): Barcode not found - BARCODE POST (41): Event full - BARCODE POST (42): Event doesn't exist - BARCODEBYKEY PUT (43): Barcode is already used - BARCODEBYKEY PUT (44): Invalid barcode - BARCODEBYKEY PUT (45): Event hasn't started yet - BARCODEBYKEY PUT (46): Event has already ended - BARCODELIST & BARCODEIDLOG GET (50): Start before end
Return format:
<nokkis>
<error id="24">Event not found</error>
<nokkis>