Возникла необходимость написать свою API к вконтакте (классы для IOS).
Вообще, сайтом я не пользовался и не собираюсь, но сама идея показалась мне интересной. И, блджад, программисты вконтакте не были бы погромистами, если бы не сделали пару вещей через жопу.
Во-первых, один из запросов возвращает довольно странный массив. Подразумевается, что в нем будут сообщения. И в нем они есть, но только с первого, блджад индекса! Что же лежит в нулевом? Количество этих сообщений! Ну охренеть просто. То есть массив содержит число под нулевым индексом и ассоциативные массивы под следующими индексами.
Во-вторых, и эта новость стала для меня просто новостью месяца, необходимость получения статуса пользователя может ввести вас в состояние полного охуения и не вставания. Итак, существует параметр scopes и его возможные значения:
http://vkontakte.ru/pages?oid=-1&p=Права_доступа_приложенийВы можете поставить их все, и при попытке получить статус пользователя вам будет возвращена ошибка 7: пользователь не разрешил приложению выполнять подобные действия.
Решение нашлось. В scopes можно пихать и маску:
http://vkontakte.ru/pages?oid=-1&p=Права_приложенийТо есть, на хрена вообще нужно перечисление? Вроде как это новый метод (нет устаревших прав типа доступа к приложениям или вопросам). В общем, вконтактщики учудили.
Я потупил малость, да сделал возможность авторизации и через маску, и через перечисление, но осадок остался.
А вот что по поводу массивов сказал один чел:
"Не надо придумывать в json несуществующее там понятие "типизированный массив". И не стоит навязывать тут собственное понимание слов "сделать нормально".
Есть мнение, и не только мое - сейчас все сделано более чем нормальным способом."
Есть мнение, что кое-кто - безнадеждный осел. Но не программисты вконтакте - они-то как раз что-то делают, пишут. А тот, кто отказывается признавать очевидные вещи.
Или вот замечательный образец ответов сервера. При isAppUser возвращается {"response":"1"}, а при status.set {"response":1}. Очень унифицированно.