Работа с API
C помощью API вы можете перенести курс с другой платформы на Stepik, настроить авторизацию, получение данных и т.д.
Stepik.org имеет REST API в формате JSON. Основные точки API перечислены на https://stepik.org/api/docs.
Документация и примеры использования API: https://github.com/StepicOrg/Stepic-API.
В stepik.org используется этот же API для работы веб-интерфейса (single-page application), поэтому все основные функции доступа и управления контентом поддерживаются через API. Некоторые редко используемые функции могут отсутствовать в API, поскольку они поддерживаются только через базовый веб-интерфейс платформы (не single-page application).
Flat
В API отсутствуют вложенные точки.
При запросе к API выдаётся не один объект, а список. Даже если запрашивался всего один объект (в таком случае в списке 1 элемент). Название списка совпадает с названием точки API.
Например, по запросу https://stepik.org/api/courses/1 выдаётся не один объект-курс, а список courses с одним объектом-курсом.
Pagination
Вся выдача GET происходит постранично с наличием в ответе словаря meta помимо запрашиваемого объекта. Получаемый JSON выглядит так:
{ "meta": { "page": 1, "has_next": true, "has_previous": false }, "requested_objects": [] }
Словарь meta содержит информацию о текущей странице и наличие следующих / предыдущих страниц.
На примере это можно посмотреть по адресу:
https://stepik.org/api/courses (синоним https://stepik.org/api/courses?page=1), и далее на https://stepik.org/api/courses?page=2, https://stepik.org/api/courses?page=3 и т.д.
Обычный размер страницы – 20 элементов, но он может изменяться в зависимости от конкретной точки API.
Много ID в одном запросе к API
Если вы знаете ID объектов и хотите запросить их сразу одним запросом, можно использовать конструкцию следующего вида:
https://stepik.org/api/courses?ids[]=2&ids[]=67&ids[]=76&ids[]=70
Поддерживается всеми точками API. Пагинации в запросах с ids[] нет.
Не рекомендуется делать запросы с большим количеством ids[]. Подобные запросы, вероятнее всего, не будут приниматься сервером, так как получается слишком большой HTTP заголовок.
Side-Loading
Одним запросом к API иногда возвращаются сразу несколько связанных элементов. Например, зарегистрированному пользователю в https://stepik.org/api/courses помимо курсов будет также выдаваться информация об enrollments – его регистрациях на курс.
OAuth 2
Для использования Stepik.org API с правами существующего аккаунта на Stepik, нужна авторизация по OAuth2.
Для этого нужно создать приложение и получить ключи по ссылке https://stepik.org/oauth2/applications от профиля пользователя. Также в настройках приложения можно указать redirect_uri, Client type и Authorization grant type.
Ваши приложения можно найти по ссылке: https://stepik.org/oauth2/applications/.
Authorization endpoint (Authorization code, Implicit grant; требует наличия redirect_uri): https://stepik.org/oauth2/authorize/.
Token endpoint (Authorization code, Password и Client credentials): https://stepik.org/oauth2/token/.
Client credentials flow
Пример получения access token с использованием client credentials flow:
curl -X POST -d "grant_type=client_credentials" -u "CLIENT_ID:CLIENT_SECRET" https://stepik.org/oauth2/token/
Ответ:
{"access_token": "ACCESS_TOKEN", "scope": "read write", "expires_in": 36000, "token_type": "Bearer"}
Пример запроса с использованием access token:
curl -H "Authorization: Bearer ACCESS_TOKEN" https://stepik.org/api/social-accounts?user=YOUR_USER_ID
Ответ:
{"meta": {"page": 1, "has_next": false, "has_previous": false}, "social-accounts": [{"id": ..., "user": ..., "provider": ..., "uid": ...}]}
Authorization code flow
- В приложении надо указать grant type = autorization_code и redirect_uri;
- Переправить пользователя на страницу https://stepik.org/oauth2/authorize/?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI;
- Пользователь аутентифицируется/регистрируется и разрешает приложению доступ к своему аккаунту (при необходимости можем не спрашивать разрешения);
- Происходит редирект на redirect_uri и передача CODE;
- Приложение запрашивает ACCESS_TOKEN:
curl -X POST -d "grant_type=authorization_code&code=CODE&redirect_uri=REDIRECT_URI" -u "CLIENT_ID:SECRET_ID" https://stepik.org/oauth2/token
- Приложение делает запросы от имени пользователя, добавляя заголовок:
Authorization: Bearer ACCESS_TOKEN; - Запрос https://stepik.org/api/stepics/1 возвращает в том числе и текущего пользователя.
Пример подключения с авторизацией по OAuth – https://gist.github.com/vyahhi/0c639c7a17c4fc828cc0.
Примеры внешних приложений, использующих Stepik.org API –- https://github.com/StepicOrg/SubmissionUtility
- https://github.com/StepicOrg/stepik-android
- https://github.com/StepicOrg/stepik-ios