Пераметры запросов могут передаваться в едином JSON-объекте посредством POST:
jsonData = {
'method': <method_name>,
'kwargs': { 'key': <param1>, 'key2': <param2>,
'key3': [ <param3_1>, <param3_2>, <param3_3> ],
... },
'username': <login_name>,
'password': <password>,
}
Либо они передаются непосредственно в POST запросе, причём параметры
авторизации везде необязательны.
Пример* для jQuery:
$.post('/api/', {
'method': <method_name>,
'key': <param1>, 'key2': <param2>,
'key3': [ <param3_1>, <param3_2>, <param3_3> ]
}, function() {});
Ключ "key3" в этом случае jQuery автоматически изменит на "key3[]".
* В данном варианте можно передавать только списки и простые значения.
Пример** для jQuery:
$.post('/api/',
{ jsonData: JSON.stringify({
'method': <method_name>,
'kwargs': { 'key': <param1>, 'key2': <param2>,
'key3': [ <param3_1>, <param3_2>, <param3_3> ],
... },
})
}, function() {});
Для правильной сериализации дат в JSON лучше использовать специальный
плагин jQuery.
** В данном варианте можно передавать любые сериализуемые объекты.
Пример в Python с HTTP Basic авторизацией:
import urllib2, json, base64
url = 'https://{{ request.get_host }}/api/'
data = {'method':"get_orders_id", 'kwargs':{'date':'2012-01-01', 'state': 4 },}
req = urllib2.Request(url, data=json.dumps(data),
headers={
'Authorization': 'Basic ' + base64.b64encode('%s:%s' % ('login', 'passwd'))
}
)
r = urllib2.urlopen(req)
print r.read()
Пример в Python без использования HTTP авторизации:
import urllib2, json
url = 'https://{{ request.get_host }}/api/'
data = {'username':'login','password':'passwd','method':"get_orders_id", 'kwargs':{'date': '2012-01-01', 'state':2 }, }
r = urllib2.urlopen(url, data=json.dumps(data))
print r.read()