Мобильное приложение и backend myTask

Обсуждение API 2.0

Posted by Yury Kamyshenko on December 11, 2013

Привет

Посмотрев на наше API 2.0 - http://docs.mytask.apiary.io появилось несколько  замечаний\улучшений. Предлагаю обсудить их и реализовать то что примем если это возможно в текущей версии (либо запишем как изменения в 2.0->3.0)

1. Вся приватная информация должна передаваться по https
2. В каждом из запросов\ответов описать какие параметры обязательны, какие опциональны.
3. Для каждого параметра указать диапазон валидных значений (если не любое значение подходит)
4. В описании протокола указать что является app ID для каждой из платформ
5. Все статусы (например заявок) перевести в enum и передавать только коды
6. Везде где в ответе приходят строки от системы (текст сообщения об ошибке, какой-то статус и т.д.) заменить также на enum (для того чтобы строки в дальнейшем локализовались на клиентах)
7. Создать новую модель данных money (amount, currency) и использовать ее во всех моделях где используются деньги (Balance, Transaction и т.д.)
8. В модели Error сделать поле code обязательным, а поле message скорее всего лучше убрать. При необходимости расширить список ошибок.
9. Подумать над уменьшением кол-ва ошибок на уровне  HTTP  и переносе части их них на уровень объекта  Error для единообразия и упрощения логики. 

Также не понятно как часто необходимо передавать location пользователя?

Comments

Yury Kamyshenko on December 11, 2013:

Для всех запросов отправляемых на сервер требуется помимо token отправлять APP ID (ID приложения), а так же UID устройства (или иную связку уникальных идентификаторов приложения и устройства, доступных в операционной системы агента), переменные:
"appid":"string" - APP ID
"uid": "string" - UID

хорошо бы добавить пример, т.к. ни в одном примере реквеста этих параметров нет 

Yury Kamyshenko on December 11, 2013:

Еще такой вопрос в API 1.0 все реквесты требующие передачи информации в теле запроса, а не в  URL делались через POST. В версии 2.0 некоторые из них сменили тип на GET (в котором не принято использовать body) (см autorization реквест). Чем это вызвано?

Evgeny Levkovich on December 11, 2013:

пример - appid=ru.nova.android.mytask&uid=204fb94b29aba266: &token=ea6e76a5047d67e852288bcea8785dc3576c370e

Yury Kamyshenko on December 11, 2013:

пустит ли пользователя система если один и тот же клиент (логин пароль) будет логиниться с разных девайсов соот. иметь разный uid (я так понимаю что его клиентское приложение само создает) ?

Evgeny Levkovich on December 11, 2013:

авторизация по POST запросу идет, а вот данные авторизации уже в разных методах по разному передаются
можно сделать по уму... эти данные слать в хедерах

Yury Kamyshenko on December 11, 2013:

ок, я перепутал про авторизацию, посмотрите пожалуйста получение списка стран (/api/v2/countries), списка задач (/api/v2/tasks), список заявок пользователя (/api/v2/user/tasks), получение сообщения чата (/api/v2/chat)

Evgeny Levkovich on December 11, 2013:


если UID сменится, то пользователю присвоится статус "Требует проверки"
Приложение не создает UID, оно просто берет  UID устройства и передает его

Evgeny Levkovich on December 11, 2013:


Смена на GET вызвана тем, что теперь у нас будет Restfull Api

Yury Kamyshenko on December 11, 2013:


может я плохо выразил свою мысль, я вижу проблему вот в этом http://stackoverflow.com/questions/11091160/rest-api-get-request-with-body

Evgeny Levkovich on December 11, 2013:

поняли что ты хотел сказать)
исправили request во всех GET с джейсона на application/x-www-form-urlencoded