• ↓
  • ↑
  • ⇑
 
12:39 

OAuth2

alhames
alhames.ru
К сожалению, не нашел никакой информации на эту тему, поэтому спрошу здесь.

Планируется ли поддержка OAuth2 хотя бы без привязки к API?
Просить ввести пароль на стороннем ресурсе не вариант, а хотелось бы иметь возможность однозначной идентификации пользователя.

@темы: Тип: Вопрос

14:54 

Запрос черновиков

marader
жизнь - замечательна и удивительна, до тех пор - пока тебя не заметят и не удивят.
почему-то, запрос черновиков возвращает пустоту.

Что get, что post.

@темы: post.get, Важность: 3 (Major), Срочность: средняя, Тип: Ошибка

00:28 

Вопрос по синтаксису

fire-dragon
post.get
by_id - по списку идентификаторов записей (postid), не более 100 за один запрос:
параметр ids - идентификаторы перечисляются через запятую;

как должен быть кодирован параметр ids.

самый лучший вариант это чистый POST запрос который выдает ответ.

Параметр [juserid] передается


Я сейчас передаю так. ниже то что уходит в теле запроса



method=post.get
sid=sid
[src]=1
type=by_id
[juserid]=пользовательский id uf дневниках
by_id={'ids': '202517189'}

@темы: Срочность: средняя, Тип: Вопрос

01:30 

Предлагаю расширить API

fire-dragon
www.diary.ru/discussion/

методы например назвать

discussion.get
discussion.getPost(int discussionId )



Функционал уже есть, просто вынести его в API

@темы: Тип: Предложение, Важность: 3 (Major), Тип: Новшество

21:00 

Примеры кода user.auth

fire-dragon
Возможно стоит добавить примеры кода и возможно тестовый аккаунт для апи.




В данном случае я получаю ошибку 67 "Неверный логин или пароль"

@темы: Важность: 1 (Trivial), Срочность: низкая, Тип: Предложение

19:22 

Юрий Рэйн
λOther side of the memory crystal. …λ
Добрый вечер!
Скажите пожалуйста, по какой причине были приняты решения при создании API, котрые признаться меня ставят в тупик:
1) Кодировать число как строку
2) Отказаться от JSON массивов и создать каждому посту ключа (который соответствует id поста, например).
Т.е. вместо {"count":8, "posts": [{},{}]} выбрать вариант, требующий более сложного разбора: {"count":"8", "posts": {"0": {}, "1":{}, }}

@темы: Тип: Предложение, Тип: Неудобство, Тип: Вопрос

15:05 

Проблема с post.create (?)

DDD
мне сказали, что ты меня все еще любишь
То ли лыжи не едут, то ли я.
Создаю новую запись через post.create и аттачу к ней изображение параметром attachment.
Все это, естественно, делается как multipart/form-data, потому что не буду же пихать урл-кодированный бинарник в x-www-form-urlencoded.
На сервер уходит такой пост-запрос:


В ответ приходит что, мол, запись успешно создана, но в записи нет загруженного изображения.

Ну и в целом очень-очень грустно жить без возможности работать с БИ через апи, и приходится делать все по-старинке, распарсивая нтмл. Например, через наиболее вменяемый способ, который /diary.php?upload=1&js и которым можно в один запрос зааплоадить изображение и тут же, в ответе того же соединения, получить ссылку на него. Можно хотя бы его как-то прикрутить к апи?

@темы: Тип: Ошибка

01:05 

krossovochkin
Хочешь чуда? Будь чудом ©
Доброго времени суток.
Скажите, чем вы парсите ответы с сервера?

Я, честно, ожидал увидеть Json, но тут какая-то вроде и похожая вещь, но к которой не знаю как подойти.
Хочется иметь аналог gson библиотеки или вроде того, которая делает преобразование строки в объект.

@темы: Тип: Вопрос, Статус: решено, Срочность: средняя, Важность: 1 (Trivial)

10:07 

Изменение в API

gluker
очень_очень_очень_много_букв_ без_пробелов
post.get

- access - степень закрытости записи
+ close_access_mode - способ закрытия записи - (0 - открыта для всех, 1 - открыта для избранных, 2 - закрыта для списка, 3 - открыта для списка, 4 - открыта для белого списка, 5 - открыта для ПЧ, 6 - открыта для зарегистрированных, 7 - закрыта для всех кроме владельцев и модераторов, 8 - открыта для членов сообщества);
+ close_access_mode2 - способ закрытия записи (10 - для взрослых);

- poll_src - голосование;
+ poll_title - вопрос;
+ poll_multiselect - тип голосования;
+ poll_end - признак окончания голосования;
+ poll_answer_[1..10] - ответы;

+ avatarid - аватар автора;




post.create/post.update

+ [tags_data] - массив тем (совместим с post.get);
* message - сообщение (для совместимости с методом post.get возможно использовать название: message_src);

@темы: post.create, post.update, post.get

22:32 

АльКорд
beta-тестер
Нужно ввести глобально в каждый метод два новых опциональных параметра:
1. список того, что нужно выдать в ответе (через запятую)
2. список того, что не нужно выдавать в ответе (через запятую)

@темы: Срочность: средняя, Статус: не исправлено, Тип: Новшество, Тип: Предложение

10:34 

Изменение в API

gluker
очень_очень_очень_много_букв_ без_пробелов
user.get - получение информации о пользователе
sid - идентификатор сессии
[userid] - идентификатор запрашиваемого пользователя, при отсутствии значения возвращается профиль текущего юзера
[fields] - список полей через "," которы необходимо получить, поумолчанию - все поля

ответ:
userid – идентификатор пользователя;
username – имя пользователя (логин);
shortname – короткое имя пользователя;
journal - тип дневника (0 – нет, 1 - дневник, 2 – сообщество);
country - страна проживания;
region – регион проживания;
city – город;
homepage – домашняя страница;
sex – пол;
education – образование;
sfera – сфера деятельности;
avatar – аватар;
joindate – дата регистрации;
email – эл.почта;
icq;
openid;
birthday – день рождения;
fav – избранные;
readers – постоянные читатели;
mycommunity.members – члены сообщества;
community.master – владелецы сообществ;
community.moderators – модератор сообществ;
community.member – член сообществ;

favs2 – избранные (userid, username);
readers2 – постоянные читатели (userid, username);
mycommunity.members2 – члены сообщества (userid, username);
mycommunity.masters2 – владелецы сообществ (userid, username);
mycommunity.moderators2 – модераторы сообществ (userid, username);
community.member2 – член сообществ (userid, journal_title);

interest – интересы;
about – о себе;

@темы: Тип: Изменение, user.get

15:43 

Система версий

Ri
И тесно облакам.
Как я и предсказывал, начались проблемы с совместимостью. Предлагаю следующую реализацию.

Код каждой версии API хранится на сервере в отдельной папке. Если нужно что-то поменять в API, код текущей версии не меняется, вместо этого создается новая папка. Исключение нужно сделать только для уязвимостей, которые нужно чинить и во всех предыдущих версиях.

Если какой-то код не относится напрямую к API, но используется в коде API, то необходимо его скопировать в папку с кодом API и использовать только скопированную версию. Это нужно потому, что если код останется вне папки API, то в какой-то момент кто-то забудет о том, что он используется в некоторых версиях API, и поменяет его. В результате API сломается.

Если происходят какие-то другие изменения в проекте (например, изменения структуры БД), нужно следить за тем, чтобы старые версии не ломались. Желательно сделать автоматические тесты всех имеющихся версий API и запускать эти тесты регулярно.

Для версий API устанавливается срок жизни, в течение которого они будут работать, даже если выходят новые версии API. Этот срок должен быть достаточно большим, чтобы разработчики успели обновить приложения. (Прошу в комментариях написать, кому какого срока достаточно.) С другой стороны, если нет необходимости удалять старую версию, то лучше этого не делать даже после того, как ее срок действия закончился. Когда API будет отшлифовано, нужно будет периодически делать версии API с долгосрочной поддержкой.

В документации нужно завести отдельную страничку для каждой версии API, а также главную страничку с таблицей, в которой указаны ссылки на версии API и сроки поддержки этих версий.

Для упрощения реализации в качестве версии лучше использовать обычное целое число. Для указания версии API можно выбрать один из следующих способов:

1) Передавать version=42 в качестве одного из GET- или POST-параметров. Этот способ более красивый.

2) В качестве URL для доступа к API использовать www.diary.ru/api/version42/?method=... Я бы предпочел этот способ, так как он более надежный. Не нужно делать общую точку входа для всех версий. Каждая версия будет просто храниться в папке versionN. В таком варианте меньше вероятность, что изменения в коде одной из версий как-то повлияют на остальные версии.

Если запрошенная версия не поддерживается, нужно отдавать клиенту сообщение об этом (во втором варианте реализации достаточно ошибки 404). Если версия не указана, то используется та версия, которая использовалась в момент введения системы версий.

@темы: Тип: Предложение, Статус: не исправлено, Важность: 3 (Major)

15:14 

АльКорд
beta-тестер
Ни с того ни с сего пропало поле message_src из метода post.get для своих постов. В результате чего у уже рабочих клиентов с отточенной логикой редактирования поста пропала возможность редактировать пост, не убивая при этом его текст.



Пожалуйста, срочно почините это.

@темы: Тип: Ошибка, Статус: решено, Срочность: высокая, Важность: 4 (Critical), post.get

04:11 

Обеспечить совместимость параметров post.get, post.create, post.update

Ri
И тесно облакам.
Сейчас наблюдается полнейшая неразбериха в параметрах этих методов. Одни и те же вещи там выдаются (или передаются) по-разному. Примеров масса:

- close_access_mode и close_access_mode2 против access
- poll_answer_x против poll_src.answer
- no_comments против no_comment

Нужно сделать так, чтобы в post.get можно было получить всю информацию, необходимую для обновления записи в post.update без потери данных. Сейчас некоторых параметров просто нет, а с другими приходится извращаться: access приходится вручную разделять на close_access_mode и close_access_mode2 с помощью сравнения с 10, для poll_src.answer приходится итерироваться и переделывать структуру данных. Полезность API в таком случае кажется сомнительной. Дайте возможность просто взять и отредактировать запись. Это же такая простая задача. Откуда такие безумные параметры?

@темы: Статус: решено, Важность: 3 (Major), post.update, post.get, post.create, Тип: Неудобство

04:00 

Режим совместимости

Ri
И тесно облакам.
Если я не ошибаюсь, раньше в post.update можно было не указывать уровень доступа, и он просто не менялся. Сейчас, если его не указать, запись становится открытой. Есть еще некоторые параметры, которых нет в API, например, альтернативный текст закрытой записи. Если он будет позже добавлен и сделан обязательным, то придется обновить код, иначе либо всё сломается, либо альтернативный текст будет просто удаляться, что нехорошо.

Будет ли поддерживаться обратная совместимость? Если нет, то необходимо дать возможность указывать, какую версию API использует приложение, и поддерживать предыдущие версии API хотя бы некоторое время.

@темы: Важность: 3 (Major), Тип: Предложение

03:53 

Варианты ответов к опросу

Ri
И тесно облакам.
В документации написано, что варианты указываются с помощью параметров poll_answer_{0..9}. Фактически используются параметры poll_answer_{1..10}. Нужно поправить или там, или там.

@темы: post.update, Статус: решено, Тип: Ошибка

11:37 

quirischa
администратор
(с капибарой на аватарке)
Про записи в сообщество:

1) одна мысль = одна запись;
2) используйте теги (мне кажется, что они достаточно наглядны, но если нет - предлагайте свои идеи);
3) если речь в вашей записи идёт про какой-то конкретный метод, дописывайте тег "<название метода>".

Спасибо.
запись создана: 12.09.2013 в 11:45

@темы: Тип: Новшество

11:37 

изменение в описании АПИ

gluker
очень_очень_очень_много_букв_ без_пробелов
comment.get - получение набора комментариев
...
[from] - начало выборки, отсутствие данного параметра, предполагает вывод полной ленты комментариев, а следовательно умолчальный лимит в 30 коментариев отключается;
...

@темы: Тип: Изменение, comment.get

11:02 

Изменение в API

gluker
очень_очень_очень_много_букв_ без_пробелов
post.get - получение набора записей
sid - идентификатор сессии;
type - тип запрашиваемого содержимого (diary - дневник/сообщество, favorites - избранное, quotes - цитатник, notepad - блокнот, draft - черновики, last - последнии записи, by_id - по списку postid (параметр: ids - идентификаторы перечисляются через запятую) не более 100 за один запрос))
[juserid]/[shortname] – - идентификатор дневника / короткое имя пользователя, раздел дневника которого, запрашивается. пропуск параметра - текущий пользователь;
[from] - начало выборки
[src] - параметр определяющий тип получаемых записей (1 - исходник; 0 (поумолчанию) - запись готовая для вывода)

ответ:
postid - идентификатор записи;
dateline_date - дата публикации;
dateline_cdate - дата первой публикации записи;
comments_count_data - количество комментариев;
access - степень закрытости записи: 0 - открыта для всех, 1 - открыта для избранных, 2 - закрыта для списка, 3 - открыта для списка, 4 - открыта для белого списка, 5 - открыта для ПЧ, 6 - открыта для зарегистрированных, 7 - закрыта для всех кроме владельцев и модераторов., 8 - откр. для членов сообщства, +10 - для взрослых;
jaccess - степень закрытости дневника, из которого получаемая запись: 0 - открыт для всех, 1 - открыт для избранных, 2 - открыт для зарегистрированных, 3 - открыт для списка, 4 - закрыт для списка, +10 - для взрослых;
subscribed - поле показыающее статус подписки текущего пользователя на дискуссию в записи;
juserid - идентификатор дневника;
shortname - короткое имя дневника;
journal_name - название дневника (для типов: last,quote,favorite);
current_music - музыка;
current_mood - настроение;

author_userid - идентификатор автора записи;
author_shortname - короткое имя дневника автора записи;
author_username - логин автора записи;
author_title - подпись автора записи;
avatar_path - аватар автора записи;

title - заголовок записи;
message_html - текст записи;
poll - голосование;

SRC
no_smile - не преобразовывать смайлы в графический образ;
no_comment - без комментариев;
message_src - исходный текст записи;
access_list - список доступа;
poll_src - голосование;
- question - вопрос;
- multiselect - тип голосования;
- end - признак окончания голосования;
- answer - ответы;

@темы: Тип: Изменение, post.get

17:46 

Самопроизвольное удаление голосования в post.update

Ri
И тесно облакам.
Если в post.update не передать никаких параметров, связанных с голосованием, то имеющееся голосование удаляется. Поскольку в API нет возможности получить имеющееся голосования, то попытка отредактировать запись с голосованием с помощью любого приложения, использующего API, приведет к потере данных. Нужно сделать следующее:

1. post.update не должен изменять состояние голосования, если никаких параметров не передано.
2. Если в post.update передан пустой текст записи и не переданы параметры голосования, но в записи уже присутствует голосование, не выдавать ошибку "вы не ввели текст записи", а сохранять остальные переданные параметры (например, теги).
3. В ответ post.get нужно добавить информацию о голосовании.

@API

главная