REST сервисы
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.08.14 09:32
Оценка: 70 (9) +1
#Имя: wiki.rsdn.restapi
Поскольку ряд товарищей спрашивает про сабж, попытаюсь поддерживать более менее актуальный список того что есть.
Общие моменты: все сервисы на данный момент на вход принимают параметры в виде form data (url для Get, тело запроса для Post), на выходе отдают JSON. Если результат с ошибками, возвращается HTTP код ошибки и JSON вида { field: "error_field", message: "error_message"}. Поле field, если оно есть, указывает на ошибку в конкретном входном параметре, либо содержит all, если ошибка к конкретному параметру не относится.

Аутентификация и сессия — общая с остальным сайтом, т.е. форма //Users/Login.aspx для логина, затем куки .RSDNAUTH и ASP.NET_SessionId.

Часть сервисов поддерживает ETag/If-None-Match и умеет возвращать 304, так что крайне желательно чтобы клиенты, отличные от браузеров, это использовали.

Для некоторых сервисов есть демки — http://rsdn.ru/rs/demo
Сервис Состояние url Метод Параметры Результат Пример
Дерево навигации Beta //frames/navtreenodes GET string node — имя родительского узла. Для корня node=.
Все дочерние узлы, с учетом вложенности, до тех узлов, которые являются либо листьями, либо требуют загрузки по требованию.

GET http://rsdn.ru/frames/navtreenodes?node=./rsdnproject/forauthors

[
    {
        "id": "./rsdnproject/forauthors/requirements",
        "label": "Требования к оформлению материалов",
        "image": "/Images/article18.png",
        "url": "/article/authors/requirements.xml",
        "children": []
    },
    {
        "id": "./rsdnproject/forauthors/template",
        "label": "Шаблон для верстки статей",
        "image": "/Images/article18.png",
        "url": "/article/authors/template.xml",
        "children": []
    },
    {
        "id": "./rsdnproject/forauthors/codestyle",
        "label": "Соглашение по оформлению кода",
        "image": "/Images/article18.png",
        "url": "/article/mag/200401/codestyle.XML",
        "children": []
    },
    {
        "id": "./rsdnproject/forauthors/noway",
        "label": "Как не надо писать статьи",
        "image": "/Images/article18.png",
        "url": "/article/authors/HowNotTowrite.xml",
        "children": []
    }
]

Сообщение RSDN Team Production //about/askteam POST string name, string email, string subj, string message
пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Регистрация пользователя Production //account/doregister POST
string login,
string nick,
string email,
string pwd1,
string pwd2,
string recaptcha_challenge_field,
string recaptcha_response_field

пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Изменение емейла и пароля Production //account/dochangereg POST
int? uid,
string email,
string oldPwd,
string pwd1,
string pwd2

пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Отправка нового сообщения Alpha //forum/<forum_name> POST
string postingID,
string forum,
int msgID,
string subject,
string posterName,
string password,
string text,
bool noSmile,
string name,
string tags,
bool notifyAboutReplies

пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Оценка сообщения Production //rs/message/<messageId>/rate/<rateType> POST
string rateType, — Тип оценки: rate, smile или agree
int messageID,
int? value — Значение оценки. Для типа rate: 1-3, для типа agree: -4 согласен, 0 не согласен

пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Удаление оценок Production //rs/message/<messageId>/rate DELETE
int messageID,

пустой респонс с 204 кодом, если все хорошо, либо информацию об ошибке
Поиск профиля по подстроке Production //rsdnsearch/findauthor GET string name Список идентификаторов и имен пользователей
GET http://rsdn.ru/rsdnsearch/findauthor/?name=vladd

[
    {
        "id":73,
        "displayName":"VladD2"
    },
    {
        "id":39067,
        "displayName":"VladD"
    },
    {
        "id":93688,
        "displayName":"VladdT"
    },
    {
        "id":95381,
        "displayName":"vladdou"
    },
    {
        "id":108143,
        "displayName":"VladD2_PNH"
    },
    {
        "id":110977,
        "displayName":"VladDebil"
    }
]

Получение списка топиков форума Alpha //rs/forum/<forum_name>/topics GET
string forum,
int? from, // По умолчанию 0
int? len // По умолчанию размер страницы из профиля
Список топиков в порядке убывания даты
GET http://rsdn.ru/rs/forum/rsdn/topics?len=2

{
    "total":5637,
    "topics":[
        {
            "accountID":187,
            "answersCount":9,
            "createdOn":"\/Date(1407336643590)\/",
            "id":5728461,
            "isAlwayOnTop":false,
            "isClosed":null,
            "lastAnswerBy":"Ops",
            "name":null,
            "lastAnswerId":80747,
            "topicRate":0,
            "topicRateCount":0,
            "topicAgrees":0,
            "topicDisagrees":0,
            "topicSmiles":0,
            "rowVersion":"0000A37F01369035",
            "subject":"сбилась разметка",
            "lastUpdatedOn":"\/Date(1407342168280)\/",
            "authorNick":"Pavel Dvorkin"
        },
        {
            "accountID":100952,
            "answersCount":1,
            "createdOn":"\/Date(1407328363343)\/",
            "id":5728286,
            "isAlwayOnTop":false,
            "isClosed":null,
            "lastAnswerBy":"AndrewVK",
            "name":null,
            "lastAnswerId":80744,
            "topicRate":20,
            "topicRateCount":2,
            "topicAgrees":0,
            "topicDisagrees":0,
            "topicSmiles":0,
            "rowVersion":"0000A37F0110A8CB",
            "subject":"Новый embedded youtube",
            "lastUpdatedOn":"\/Date(1407332030580)\/",
            "authorNick":"Evgeny.Panasyuk"
        }
    ]
}

Получение списка ответов топика Alpha //rs/topic/<topicId>/replies GET int topicId Список ответов в порядке возрастания даты
GET http://rsdn.ru/rs/topic/5727307/replies

[
    {
        "accountID":5161,
        "createdOn":"\/Date(1407332097413)\/",
        "id":5728370,
        "isClosed":null,
        "name":null,
        "rate":0,
        "rateCount":0,
        "agrees":0,
        "disagrees":0,
        "smiles":0,
        "rowVersion":"0000A37F0121C0A8",
        "subject":"Re: Некоторые недочеты",
        "authorNick":"AndrewVK",
        "parentId":5727307
    },
    {
        "accountID":99637,
        "createdOn":"\/Date(1407345231857)\/",
        "id":5728657,
        "isClosed":null,
        "name":null,
        "rate":0,
        "rateCount":0,
        "agrees":0,
        "disagrees":0,
        "smiles":0,
        "rowVersion":"0000A37F015DE095",
        "subject":"Re[2]: Некоторые недочеты",
        "authorNick":"BrainSlug",
        "parentId":5728370
    },
    {
        "accountID":5161,
        "createdOn":"\/Date(1407346966247)\/",
        "id":5728717,
        "isClosed":null,
        "name":null,
        "rate":0,
        "rateCount":0,
        "agrees":0,
        "disagrees":0,
        "smiles":0,
        "rowVersion":"0000A37F0165D112",
        "subject":"Re[3]: Некоторые недочеты",
        "authorNick":"AndrewVK",
        "parentId":5728657
    }
]

Получение сообщения Alpha //rs/message/<messageId> GET
int messageId,
bool? formatted
Сообщение, включая его текст. В зависимости от значения formatted в качестве текста будет либо исходный код, либо готовый html для отображения
GET http://rsdn.ru/rs/message/5728645?formatted=true

{
    "accountID":78670,
    "createdOn":"\/Date(1407344805630)\/",
    "id":5728645,"isClosed":null,
    "name":null,
    "rate":20,
    "rateCount":10,
    "agrees":0,
    "disagrees":0,
    "smiles":0,
    "rowVersion":"0000A37F015BED19",
    "subject":"Теперь вы все мои гости",
    "authorNick":"Берсерк",
    "text":"\u003ctable\u003e\u003ctr\u003e\u003ctd class=
        \u0027m\u0027\u003e\u003cfont size=2\u003eВ
        догонку к истории с Лабиринтом:\u003cbr 
        /\u003e\n\u003cbr /\u003e\n\u003cblockquote
        class=\u0027q\u0027\u003e\u003cp\u003eРоссийские
        туристы ..."
}

Получение сообщений топика Alpha //rs/topic/<topicId>/messages GET
int topicId,
bool? formatted,
int? from,
int? len
Сообщения указанного топика, включая текст. В зависимости от значения formatted в качестве текста будет либо исходный код, либо готовый html для отображения
GET http://rsdn.ru/rs/topic/5727307/messages/?len=2&from=2

[
    {
        "accountId":99637,
        "createdOn":"2014-08-05T23:03:52.2700000",
        "id":5727307,
        "isClosed":null,
        "name":null,
        "rate":5,
        "rateCount":1,
        "agrees":0,
        "disagrees":0,
        "smiles":0,
        "rowVersion":"0000A37E017C1771",
        "subject":"Некоторые недочеты",
        "authorNick":"BrainSlug",
        "text":"В принципе ничего серьезного. Но у меня при голосовании (rsdn.ru/poll/5136) под анонимом ...",
        "gravatarHash":"35d4bb2787c66a855fdcf912d8f04ad6",
        "forum":"rsdn",
        "versions":[]
    },
    {
        "accountId":99637,
        "createdOn":"2014-08-06T21:13:51.8570000",
        "id":5728657,
        "isClosed":null,
        "name":null,
        "rate":0,
        "rateCount":0,
        "agrees":0,
        "disagrees":0,
        "smiles":0,
        "rowVersion":"0000A37F015DE095",
        "subject":"Re[2]: Некоторые недочеты",
        "authorNick":"BrainSlug",
        "text":"\r\nAVK\u003eНе воспроизвелось. У тебя воспроизводится?\r\nуже нет :)...",
        "gravatarHash":"35d4bb2787c66a855fdcf912d8f04ad6",
        "forum":"rsdn",
        "versions":[]
    }
]

AVK Blog
Отредактировано 05.09.2014 23:36 AndrewVK . Предыдущая версия . Еще …
Отредактировано 01.09.2014 13:54 AndrewVK . Предыдущая версия .
Отредактировано 15.08.2014 12:12 AndrewVK . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.