Перейти к содержимому
GitRiverGitRiver
EN
Навигация

Совместимость с интерфейсом ГитХаба

Слой совместимости с ГитХабом: какие вызовы его API приняты, чем отличаются ответы и что не поддерживается

GitRiver отвечает на часть вызовов ГитХаба по адресу /api/v3 — по тому же пути, что и ГитХаб Enterprise Server. Инструменту, написанному под ГитХаб, достаточно сменить адрес сервера и токен.

GitRiver также отвечает на интерфейс ГитЛаба, на /api/v4 (описание). Числовые идентификаторы у обоих диалектов общие: id репозитория одинаков что в ответе /api/v3, что в ответе /api/v4.

Документ описывает, что поддержано, а что нет. Не попавшее в таблицу «Поддержанные вызовы» не работает, даже если у ГитХаба такой вызов есть.

Договор этого слоя — совпадение с ответом ГитХаба: обещание совместимости /api/v1 на /api/v3 не распространяется, и номер v3 здесь — версия интерфейса ГитХаба, а не GitRiver.

Подключение

# gh
export GH_HOST=git.example.org
gh auth login --hostname git.example.org --with-token < token.txt

# октокит
new Octokit({ baseUrl: "https://git.example.org/api/v3", auth: token })

# curl
curl -H "Authorization: token $TOKEN" https://git.example.org/api/v3/user

Токен — обычный персональный токен доступа GitRiver. Принимаются обе схемы заголовка: Authorization: token <…> (так ходят gh и октокит) и Authorization: Bearer <…>.

Поддержанные вызовы

Вызов Состояние
GET /api/v3 карта адресов
GET /api/v3/user владелец токена
GET /api/v3/user/repos репозитории владельца токена; параметры type, sort
GET /api/v3/users/{username} профиль; видимость — по настройке public_profiles
GET /api/v3/users/{username}/repos репозитории пользователя, видимые клиенту
GET /api/v3/orgs/{org} группа GitRiver, показанная организацией
GET /api/v3/orgs/{org}/repos репозитории группы, видимые клиенту
GET /api/v3/repos/{owner}/{repo} репозиторий
GET /api/v3/repos/{owner}/{repo}/branches ветки, постранично
GET /api/v3/repos/{owner}/{repo}/branches/{branch} одна ветка
GET /api/v3/repos/{owner}/{repo}/commits коммиты; параметры sha, path
GET /api/v3/repos/{owner}/{repo}/commits/{sha} один коммит
GET /api/v3/repos/{owner}/{repo}/git/trees/{sha} дерево по идентификатору; recursive=1 — со всей вложенностью
GET /api/v3/repos/{owner}/{repo}/contents/{path} файл, каталог, ссылка или подмодуль; параметр ref
GET /api/v3/repos/{owner}/{repo}/issues задачи; параметр state
POST /api/v3/repos/{owner}/{repo}/issues создать задачу
GET /api/v3/repos/{owner}/{repo}/issues/{number} одна задача
PATCH /api/v3/repos/{owner}/{repo}/issues/{number} правка, закрытие и переоткрытие
GET /api/v3/repos/{owner}/{repo}/issues/{number}/comments комментарии
POST /api/v3/repos/{owner}/{repo}/issues/{number}/comments добавить комментарий
GET /api/v3/repos/{owner}/{repo}/pulls запросы на слияние; параметр state
POST /api/v3/repos/{owner}/{repo}/pulls создать запрос; head в форме владелец:ветка — из форка
GET /api/v3/repos/{owner}/{repo}/pulls/{number} один запрос
GET /api/v3/repos/{owner}/{repo}/releases релизы; черновики — только тем, кто может писать
POST /api/v3/repos/{owner}/{repo}/releases создать релиз (тег должен существовать)
GET /api/v3/repos/{owner}/{repo}/releases/tags/{tag} релиз по тегу
GET /api/v3/repos/{owner}/{repo}/commits/{sha}/statuses состояния проверок коммита, постранично
GET /api/v3/repos/{owner}/{repo}/commits/{sha}/status сводное состояние
POST /api/v3/repos/{owner}/{repo}/statuses/{sha} выставить состояние проверки
GET /api/v3/repos/{owner}/{repo}/hooks вебхуки, постранично (нужны права администратора репозитория)

Изменяющие вызовы действуют так же, как те же действия через /api/v1: с проверкой прав, вебхуками, оповещениями каналов, уведомлениями и записью в ленту активности.

Пока не поддержаны: слияние запросов, рецензии и правка комментариев к коду, управление вебхуками (создание и удаление), метки и вехи отдельными вызовами, git/blobs, события и уведомления, GraphQL.

Постраничная выдача

Как у ГитХаба: параметры page (с 1) и per_page (по умолчанию 30, предел 100), соседние страницы — в заголовке Link.

Цена страницы не зависит от её номера: глубокие страницы обходятся так же дёшево, как первые. Исключение одно — история коммитов, о ней ниже.

rel="last" выставляется только там, где общее число записей известно точно: у веток, комментариев, релизов и состояний коммита. У истории коммитов last нет. Обходите выдачу по rel="next" — он есть везде.

Что всё-таки зависит от объёма

Цена страницы истории коммитов (/commits) растёт с её номером: на репозитории с пятьюдесятью тысячами коммитов пятисотая страница обходится примерно в тридцать раз дороже первой. Номер страницы ограничен десятью тысячами. Клиенту, который читает историю целиком, дешевле склонировать репозиторий.

Рекурсивное дерево (git/trees/{sha}?recursive=1) страниц не имеет — так же, как у ГитХаба. Ответ ограничен десятью тысячами записей; за этой границей в теле стоит "truncated": true, и остаток дочитывается по подкаталогам.

Ошибки

Тело отказа — {"message": "…", "status": "…"}, как у ГитХаба: в message — причина, в status — код ответа строкой. В эту форму приводятся все отказы слоя, в том числе несуществующий адрес, неподходящий метод, истёкший срок ответа и превышение предела частоты.

Непрошедшая проверку сущность отдаётся с кодом 422, как у ГитХаба (/api/v1 на то же отвечает 400). Неразборчивое тело запроса — 400, так же как у ГитХаба.

Тексты 401 и 404 — канонические (Requires authentication, Not Found), как у ГитХаба; подробность о том, чего именно не нашлось, пишется в журнал сервера. У 403 и 422 текст содержательный — так же, как у ГитХаба.

Недоступный объект отвечает 404 с тем же телом, что и несуществующий адрес: закрытое неотличимо от несуществующего. Так отвечает и сам ГитХаб, и так же ведёт себя /api/v1. 403 остаётся там, где клиент объект видит, но прав не хватает на само действие: архивный репозиторий, токен без нужной области доступа, предел редакции.

Предел частоты у слоя общий с /api/v1: изменяющие вызовы попадают в ту же корзину. Заголовки X-RateLimit-* приходят только на ответах изменяющих вызовов: чтения в GitRiver пределом частоты не ограничиваются, и на их ответах этих заголовков нет.

Расхождения

Правило слоя: поле либо несёт достоверное значение, либо не отдаётся вовсе. Подставленных «правдоподобных» значений слой не отдаёт.

Совместимость понимается так: каждый поддержанный вызов отвечает так же, как у ГитХаба, за вычетом отличий, перечисленных ниже. Вызовы, которых нет в таблице «Поддержанные вызовы», не поддерживаются.

Осознанные отличия

Здесь — отличия ПОВЕДЕНИЯ. Отличия по составу полей перечислены ниже, в разделе «Отличия в составе полей»; тот перечень полон на день выпуска.

Что Как у нас Что учесть
GET /orgs/{org} и её списки видимость решает членство и уровень видимости самой группы приватная группа видна только её участникам — так же, как в /api/v1 и /api/v4
GET /users/{username} видимость решает настройка сервера public_profiles; по умолчанию профили закрыты у ГитХаба профили по умолчанию открыты. Чтобы инструмент читал профили без входа, администратор включает public_profiles; настройка действует одинаково на /api/v1, /api/v3 и /api/v4. Карточка автора (author/user) у задачи, комментария, запроса на слияние, рецензии и релиза отдаётся в ответе всегда, независимо от настройки
rel="last" у истории коммитов не выставляется историю обходят по rel="next"
contents для файла больше 1 МБ отказ так же, как у ГитХаба. Но прочитать такой файл через git/blobs, как у ГитХаба, нельзя: этот вызов пока не поддержан
url у записей-файлов в ответе git/trees не отдаётся вызов git/blobs, на который он указывал бы, не поддержан
токен задания CI работает как анонимный клиент приватный репозиторий по нему недоступен; сценарию нужен персональный токен. У ГитХаба встроенный токен действия читает свой репозиторий
/issues отдаёт только задачи у ГитХаба задачи и запросы на слияние делят одно пространство номеров, и /issues возвращает и те и другие. В GitRiver это разные сущности с независимой нумерацией; запросы на слияние читаются через /pulls
head.sha и base.sha в запросе на слияние пустые вершину ветки даёт GET /repos/{owner}/{repo}/branches/{branch}

Как заполняются поля

Поле Как у нас
id целое число, присвоенное объекту при первом обращении и не меняющееся впредь. У одного объекта одно и то же число в /api/v3 и /api/v4
node_id непрозрачный идентификатор из вида сущности и её номера — клиенты его не разбирают, только передают обратно
avatar_url значок-идентикон, выводимый из имени (/avatars/{имя}.svg): он постоянен для имени и не требует внешних служб. Загрузки своих изображений в GitRiver нет
pushed_at время последней отправки — одинаково для отправки по HTTP и по SSH. null — отправок не было (так же у ГитХаба для пустого репозитория)
updated_at у владельца токена (GET /user) время последней правки профиля
commit.message полный текст сообщения, а не только заголовок
commit.tree идентификатор дерева коммита

Все адреса, которые слой отдаёт в ответах (url, html_url, download_url, avatar_url, адрес дерева и владельца), ведут на существующий ресурс.

Проверенные клиенты

Слой работает с gh и @octokit/rest на всех поддержанных вызовах, включая постраничный обход: gh api --paginate и octokit.paginate сами разбирают заголовок Link.

Особенность подключения gh: он принимает только имя хоста без порта и ходит по HTTPS, поэтому сервер, доступный как https://git.example.org, подключается штатным gh auth login --hostname. Для сервера на нестандартном порту или без TLS помогает полный адрес: GH_ENTERPRISE_TOKEN=… gh api http://сервер:порт/api/v3/user.

Что гарантировано отдельно от формы ответа

Числовые идентификаторы устойчивы между вызовами. Чужой приватный репозиторий недоступен ни постороннему с токеном, ни анониму. Настройка видимости профилей действует одинаково на /api/v1 и /api/v3.

Отличия в составе полей

Перечень касается состава и типов полей ответа, в том числе вложенных, в сравнении с интерфейсом ГитХаба версии 2022-11-28; значений полей он не описывает.

Перечень ниже полон на день выпуска для всех поддержанных вызовов, кроме названных в конце раздела: каждое отличие в составе полей либо устранено, либо названо здесь — как у нас и почему. Необъявленных отличий выпуск не содержит.

Принятые расхождения

Перечни полей раскрываются: их сотни, и таблицей они нечитаемы. Искать поле в этом разделе следует поиском по странице — оно названо здесь целиком, вместе с путём внутри ответа.

Нет у нас — все вызовы диалекта, полей: 128.

Поля репозитория ГитХаба, которым в GitRiver нет соответствия: лицензия, язык, темы, домашняя страница, зеркало, счётчики подписчиков и сети форков, признаки has_downloads и has_pull_requests, свои свойства репозитория. Семейство *_url — шаблоны адресов ГитХаба; часть из них ведёт к вызовам, которых слой не поддерживает. git_url — адрес по протоколу git://, которого GitRiver не поддерживает: клонирование — по HTTPS или SSH (clone_url, ssh_url). open_issues_count не отдаётся. permissions отдаётся только в ответе по одному репозиторию, в списках его нет; уровней maintain и triage в GitRiver нет. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.archive_url, $.assignees_url, $.blobs_url, $.collaborators_url, $.comments_url, $.commits_url, $.compare_url, $.contributors_url, $.deployments_url, $.downloads_url, $.events_url, $.forks_url, $.git_commits_url, $.git_refs_url, $.git_tags_url, $.git_url, $.has_downloads, $.has_pull_requests, $.homepage, $.hooks_url, $.issue_comment_url, $.issue_events_url, $.issues_url, $.keys_url, $.labels_url, $.language, $.languages_url, $.license, $.license.key, $.license.name, $.license.node_id, $.license.spdx_id, $.license.url, $.merges_url, $.milestones_url, $.mirror_url, $.network_count, $.notifications_url, $.open_issues, $.open_issues_count, $.owner.events_url, $.owner.followers_url, $.owner.following_url, $.owner.gists_url, $.owner.gravatar_id, $.owner.organizations_url, $.owner.received_events_url, $.owner.starred_url, $.owner.subscriptions_url, $.owner.user_view_type, $.permissions.maintain, $.permissions.triage, $.pull_request_creation_policy, $.stargazers_url, $.statuses_url, $.subscribers_count, $.subscribers_url, $.subscription_url, $.svn_url, $.tags_url, $.teams_url, $.temp_clone_token, $.topics, $.topics[], $[].archive_url, $[].assignees_url, $[].blobs_url, $[].collaborators_url, $[].comments_url, $[].commits_url, $[].compare_url, $[].contributors_url, $[].custom_properties, $[].deployments_url, $[].downloads_url, $[].events_url, $[].forks_url, $[].git_commits_url, $[].git_refs_url, $[].git_tags_url, $[].git_url, $[].has_downloads, $[].has_pull_requests, $[].homepage, $[].issue_comment_url, $[].issue_events_url, $[].keys_url, $[].labels_url, $[].language, $[].languages_url, $[].license, $[].license.key, $[].license.name, $[].license.node_id, $[].license.spdx_id, $[].license.url, $[].merges_url, $[].milestones_url, $[].mirror_url, $[].notifications_url, $[].open_issues, $[].open_issues_count, $[].owner.events_url, $[].owner.followers_url, $[].owner.following_url, $[].owner.gists_url, $[].owner.gravatar_id, $[].owner.organizations_url, $[].owner.received_events_url, $[].owner.starred_url, $[].owner.subscriptions_url, $[].owner.user_view_type, $[].permissions, $[].permissions.admin, $[].permissions.maintain, $[].permissions.pull, $[].permissions.push, $[].permissions.triage, $[].pull_request_creation_policy, $[].stargazers_url, $[].statuses_url, $[].subscribers_url, $[].subscription_url, $[].svn_url, $[].tags_url, $[].teams_url, $[].topics, $[].topics[]

Нет у нас — все вызовы диалекта, полей: 25.

Чужой профиль (GET /users/{username}) отдаётся краткой карточкой: без имени, почты, времени создания и правки — они есть только в профиле владельца токена (GET /user). Рассказа о себе, места работы, ссылок на внешние сети, счётчиков подписчиков и публичных репозиториев в модели участника GitRiver нет; семейство *_url ведёт к неподдержанным вызовам. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.bio, $.blog, $.company, $.created_at, $.email, $.events_url, $.followers, $.followers_url, $.following, $.following_url, $.gists_url, $.gravatar_id, $.hireable, $.location, $.name, $.notification_email, $.organizations_url, $.public_gists, $.public_repos, $.received_events_url, $.starred_url, $.subscriptions_url, $.twitter_username, $.updated_at, $.user_view_type

Нет у нас — все вызовы диалекта, полей: 18.

Поля организации ГитХаба, которым в GitRiver нет соответствия: проверенный домен, доски задач, счётчики участников и публичных репозиториев, компания, место, почта, сайт, время помещения в архив; семейство *_url ведёт к неподдержанным вызовам. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.archived_at, $.blog, $.company, $.email, $.events_url, $.followers, $.following, $.has_organization_projects, $.has_repository_projects, $.hooks_url, $.is_verified, $.issues_url, $.location, $.members_url, $.public_gists, $.public_members_url, $.public_repos, $.twitter_username

Нет у нас — все вызовы диалекта, полей: 164.

Поля задачи ГитХаба, которым в GitRiver нет соответствия: отношение автора к проекту, реакции, приложения, вложенные задачи и зависимости, причина закрытия, закреплённый комментарий, кто закрыл задачу (closed_by). О вехе: number — её номер внутри репозитория, а своей нумерации вех в GitRiver нет; creator — кто завёл веху, не хранится; closed_issues не отдаётся; страницы вехи и вызова её меток нет, поэтому нет и html_url, labels_url. У автора задачи нет шаблонов адресов *_url к неподдержанным вызовам. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.author_association, $.closed_by, $.closed_by.avatar_url, $.closed_by.events_url, $.closed_by.followers_url, $.closed_by.following_url, $.closed_by.gists_url, $.closed_by.gravatar_id, $.closed_by.html_url, $.closed_by.id, $.closed_by.login, $.closed_by.node_id, $.closed_by.organizations_url, $.closed_by.received_events_url, $.closed_by.repos_url, $.closed_by.site_admin, $.closed_by.starred_url, $.closed_by.subscriptions_url, $.closed_by.type, $.closed_by.url, $.closed_by.user_view_type, $.comments_url, $.events_url, $.issue_dependencies_summary, $.issue_dependencies_summary.blocked_by, $.issue_dependencies_summary.blocking, $.issue_dependencies_summary.total_blocked_by, $.issue_dependencies_summary.total_blocking, $.labels_url, $.milestone.closed_issues, $.milestone.creator, $.milestone.creator.avatar_url, $.milestone.creator.events_url, $.milestone.creator.followers_url, $.milestone.creator.following_url, $.milestone.creator.gists_url, $.milestone.creator.gravatar_id, $.milestone.creator.html_url, $.milestone.creator.id, $.milestone.creator.login, $.milestone.creator.node_id, $.milestone.creator.organizations_url, $.milestone.creator.received_events_url, $.milestone.creator.repos_url, $.milestone.creator.site_admin, $.milestone.creator.starred_url, $.milestone.creator.subscriptions_url, $.milestone.creator.type, $.milestone.creator.url, $.milestone.creator.user_view_type, $.milestone.html_url, $.milestone.labels_url, $.milestone.number, $.performed_via_github_app, $.pinned_comment, $.reactions, $.reactions.+1, $.reactions.-1, $.reactions.confused, $.reactions.eyes, $.reactions.heart, $.reactions.hooray, $.reactions.laugh, $.reactions.rocket, $.reactions.total_count, $.reactions.url, $.state_reason, $.sub_issues_summary, $.sub_issues_summary.completed, $.sub_issues_summary.percent_completed, $.sub_issues_summary.total, $.timeline_url, $.user.events_url, $.user.followers_url, $.user.following_url, $.user.gists_url, $.user.gravatar_id, $.user.organizations_url, $.user.received_events_url, $.user.starred_url, $.user.subscriptions_url, $.user.user_view_type, $[].author_association, $[].closed_by, $[].closed_by.avatar_url, $[].closed_by.events_url, $[].closed_by.followers_url, $[].closed_by.following_url, $[].closed_by.gists_url, $[].closed_by.gravatar_id, $[].closed_by.html_url, $[].closed_by.id, $[].closed_by.login, $[].closed_by.node_id, $[].closed_by.organizations_url, $[].closed_by.received_events_url, $[].closed_by.repos_url, $[].closed_by.site_admin, $[].closed_by.starred_url, $[].closed_by.subscriptions_url, $[].closed_by.type, $[].closed_by.url, $[].closed_by.user_view_type, $[].comments_url, $[].events_url, $[].issue_dependencies_summary, $[].issue_dependencies_summary.blocked_by, $[].issue_dependencies_summary.blocking, $[].issue_dependencies_summary.total_blocked_by, $[].issue_dependencies_summary.total_blocking, $[].labels_url, $[].milestone.closed_issues, $[].milestone.creator, $[].milestone.creator.avatar_url, $[].milestone.creator.events_url, $[].milestone.creator.followers_url, $[].milestone.creator.following_url, $[].milestone.creator.gists_url, $[].milestone.creator.gravatar_id, $[].milestone.creator.html_url, $[].milestone.creator.id, $[].milestone.creator.login, $[].milestone.creator.node_id, $[].milestone.creator.organizations_url, $[].milestone.creator.received_events_url, $[].milestone.creator.repos_url, $[].milestone.creator.site_admin, $[].milestone.creator.starred_url, $[].milestone.creator.subscriptions_url, $[].milestone.creator.type, $[].milestone.creator.url, $[].milestone.creator.user_view_type, $[].milestone.html_url, $[].milestone.labels_url, $[].milestone.number, $[].performed_via_github_app, $[].pinned_comment, $[].reactions, $[].reactions.+1, $[].reactions.-1, $[].reactions.confused, $[].reactions.eyes, $[].reactions.heart, $[].reactions.hooray, $[].reactions.laugh, $[].reactions.rocket, $[].reactions.total_count, $[].reactions.url, $[].state_reason, $[].sub_issues_summary, $[].sub_issues_summary.completed, $[].sub_issues_summary.percent_completed, $[].sub_issues_summary.total, $[].timeline_url, $[].user.events_url, $[].user.followers_url, $[].user.following_url, $[].user.gists_url, $[].user.gravatar_id, $[].user.organizations_url, $[].user.received_events_url, $[].user.starred_url, $[].user.subscriptions_url, $[].user.user_view_type

Нет у нас — все вызовы диалекта, полей: 25.

Поля комментария ГитХаба, которым в GitRiver нет соответствия: отношение автора к проекту, реакции, сокрытие и закрепление комментария, приложения. У автора нет шаблонов адресов *_url к неподдержанным вызовам. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$[].author_association, $[].minimized, $[].performed_via_github_app, $[].pin, $[].reactions, $[].reactions.+1, $[].reactions.-1, $[].reactions.confused, $[].reactions.eyes, $[].reactions.heart, $[].reactions.hooray, $[].reactions.laugh, $[].reactions.rocket, $[].reactions.total_count, $[].reactions.url, $[].user.events_url, $[].user.followers_url, $[].user.following_url, $[].user.gists_url, $[].user.gravatar_id, $[].user.organizations_url, $[].user.received_events_url, $[].user.starred_url, $[].user.subscriptions_url, $[].user.user_view_type

Нет у нас — все вызовы диалекта, полей: 568.

Поля запроса на слияние ГитХаба, которым в GitRiver нет соответствия: автослияние, возможность правки сопровождающим, признак возможности перебазирования, команды-рецензенты, отношение автора к проекту, кто слил запрос (merged_by), счётчики комментариев (comments, review_comments), адреса различий (diff_url, patch_url) и часть ссылок _links. Вложенные карточки репозитория и участника (head.repo, base.repo, head.user, base.user) не отдаются: сведения о репозитории даёт GET /repos/{owner}/{repo}. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$._links.commits, $._links.commits.href, $._links.review_comment, $._links.review_comment.href, $._links.review_comments, $._links.review_comments.href, $._links.statuses, $._links.statuses.href, $.author_association, $.auto_merge, $.base.repo, $.base.repo.allow_forking, $.base.repo.archive_url, $.base.repo.archived, $.base.repo.assignees_url, $.base.repo.blobs_url, $.base.repo.branches_url, $.base.repo.clone_url, $.base.repo.collaborators_url, $.base.repo.comments_url, $.base.repo.commits_url, $.base.repo.compare_url, $.base.repo.contents_url, $.base.repo.contributors_url, $.base.repo.created_at, $.base.repo.default_branch, $.base.repo.deployments_url, $.base.repo.description, $.base.repo.disabled, $.base.repo.downloads_url, $.base.repo.events_url, $.base.repo.fork, $.base.repo.forks, $.base.repo.forks_count, $.base.repo.forks_url, $.base.repo.full_name, $.base.repo.git_commits_url, $.base.repo.git_refs_url, $.base.repo.git_tags_url, $.base.repo.git_url, $.base.repo.has_discussions, $.base.repo.has_downloads, $.base.repo.has_issues, $.base.repo.has_pages, $.base.repo.has_projects, $.base.repo.has_pull_requests, $.base.repo.has_wiki, $.base.repo.homepage, $.base.repo.hooks_url, $.base.repo.html_url, $.base.repo.id, $.base.repo.is_template, $.base.repo.issue_comment_url, $.base.repo.issue_events_url, $.base.repo.issues_url, $.base.repo.keys_url, $.base.repo.labels_url, $.base.repo.language, $.base.repo.languages_url, $.base.repo.license, $.base.repo.license.key, $.base.repo.license.name, $.base.repo.license.node_id, $.base.repo.license.spdx_id, $.base.repo.license.url, $.base.repo.merges_url, $.base.repo.milestones_url, $.base.repo.mirror_url, $.base.repo.name, $.base.repo.node_id, $.base.repo.notifications_url, $.base.repo.open_issues, $.base.repo.open_issues_count, $.base.repo.owner, $.base.repo.owner.avatar_url, $.base.repo.owner.events_url, $.base.repo.owner.followers_url, $.base.repo.owner.following_url, $.base.repo.owner.gists_url, $.base.repo.owner.gravatar_id, $.base.repo.owner.html_url, $.base.repo.owner.id, $.base.repo.owner.login, $.base.repo.owner.node_id, $.base.repo.owner.organizations_url, $.base.repo.owner.received_events_url, $.base.repo.owner.repos_url, $.base.repo.owner.site_admin, $.base.repo.owner.starred_url, $.base.repo.owner.subscriptions_url, $.base.repo.owner.type, $.base.repo.owner.url, $.base.repo.owner.user_view_type, $.base.repo.private, $.base.repo.pull_request_creation_policy, $.base.repo.pulls_url, $.base.repo.pushed_at, $.base.repo.releases_url, $.base.repo.size, $.base.repo.ssh_url, $.base.repo.stargazers_count, $.base.repo.stargazers_url, $.base.repo.statuses_url, $.base.repo.subscribers_url, $.base.repo.subscription_url, $.base.repo.svn_url, $.base.repo.tags_url, $.base.repo.teams_url, $.base.repo.topics, $.base.repo.topics[], $.base.repo.trees_url, $.base.repo.updated_at, $.base.repo.url, $.base.repo.visibility, $.base.repo.watchers, $.base.repo.watchers_count, $.base.repo.web_commit_signoff_required, $.base.user, $.base.user.avatar_url, $.base.user.events_url, $.base.user.followers_url, $.base.user.following_url, $.base.user.gists_url, $.base.user.gravatar_id, $.base.user.html_url, $.base.user.id, $.base.user.login, $.base.user.node_id, $.base.user.organizations_url, $.base.user.received_events_url, $.base.user.repos_url, $.base.user.site_admin, $.base.user.starred_url, $.base.user.subscriptions_url, $.base.user.type, $.base.user.url, $.base.user.user_view_type, $.comments, $.comments_url, $.commits_url, $.diff_url, $.head.repo, $.head.repo.allow_forking, $.head.repo.archive_url, $.head.repo.archived, $.head.repo.assignees_url, $.head.repo.blobs_url, $.head.repo.branches_url, $.head.repo.clone_url, $.head.repo.collaborators_url, $.head.repo.comments_url, $.head.repo.commits_url, $.head.repo.compare_url, $.head.repo.contents_url, $.head.repo.contributors_url, $.head.repo.created_at, $.head.repo.default_branch, $.head.repo.deployments_url, $.head.repo.description, $.head.repo.disabled, $.head.repo.downloads_url, $.head.repo.events_url, $.head.repo.fork, $.head.repo.forks, $.head.repo.forks_count, $.head.repo.forks_url, $.head.repo.full_name, $.head.repo.git_commits_url, $.head.repo.git_refs_url, $.head.repo.git_tags_url, $.head.repo.git_url, $.head.repo.has_discussions, $.head.repo.has_downloads, $.head.repo.has_issues, $.head.repo.has_pages, $.head.repo.has_projects, $.head.repo.has_pull_requests, $.head.repo.has_wiki, $.head.repo.homepage, $.head.repo.hooks_url, $.head.repo.html_url, $.head.repo.id, $.head.repo.is_template, $.head.repo.issue_comment_url, $.head.repo.issue_events_url, $.head.repo.issues_url, $.head.repo.keys_url, $.head.repo.labels_url, $.head.repo.language, $.head.repo.languages_url, $.head.repo.license, $.head.repo.license.key, $.head.repo.license.name, $.head.repo.license.node_id, $.head.repo.license.spdx_id, $.head.repo.license.url, $.head.repo.merges_url, $.head.repo.milestones_url, $.head.repo.mirror_url, $.head.repo.name, $.head.repo.node_id, $.head.repo.notifications_url, $.head.repo.open_issues, $.head.repo.open_issues_count, $.head.repo.owner, $.head.repo.owner.avatar_url, $.head.repo.owner.events_url, $.head.repo.owner.followers_url, $.head.repo.owner.following_url, $.head.repo.owner.gists_url, $.head.repo.owner.gravatar_id, $.head.repo.owner.html_url, $.head.repo.owner.id, $.head.repo.owner.login, $.head.repo.owner.node_id, $.head.repo.owner.organizations_url, $.head.repo.owner.received_events_url, $.head.repo.owner.repos_url, $.head.repo.owner.site_admin, $.head.repo.owner.starred_url, $.head.repo.owner.subscriptions_url, $.head.repo.owner.type, $.head.repo.owner.url, $.head.repo.owner.user_view_type, $.head.repo.private, $.head.repo.pull_request_creation_policy, $.head.repo.pulls_url, $.head.repo.pushed_at, $.head.repo.releases_url, $.head.repo.size, $.head.repo.ssh_url, $.head.repo.stargazers_count, $.head.repo.stargazers_url, $.head.repo.statuses_url, $.head.repo.subscribers_url, $.head.repo.subscription_url, $.head.repo.svn_url, $.head.repo.tags_url, $.head.repo.teams_url, $.head.repo.topics, $.head.repo.trees_url, $.head.repo.updated_at, $.head.repo.url, $.head.repo.visibility, $.head.repo.watchers, $.head.repo.watchers_count, $.head.repo.web_commit_signoff_required, $.head.user, $.head.user.avatar_url, $.head.user.events_url, $.head.user.followers_url, $.head.user.following_url, $.head.user.gists_url, $.head.user.gravatar_id, $.head.user.html_url, $.head.user.id, $.head.user.login, $.head.user.node_id, $.head.user.organizations_url, $.head.user.received_events_url, $.head.user.repos_url, $.head.user.site_admin, $.head.user.starred_url, $.head.user.subscriptions_url, $.head.user.type, $.head.user.url, $.head.user.user_view_type, $.maintainer_can_modify, $.merged_by, $.patch_url, $.rebaseable, $.requested_teams, $.review_comment_url, $.review_comments, $.review_comments_url, $.statuses_url, $.user.events_url, $.user.followers_url, $.user.following_url, $.user.gists_url, $.user.gravatar_id, $.user.organizations_url, $.user.received_events_url, $.user.starred_url, $.user.subscriptions_url, $.user.user_view_type, $[]._links.commits, $[]._links.commits.href, $[]._links.review_comment, $[]._links.review_comment.href, $[]._links.review_comments, $[]._links.review_comments.href, $[]._links.statuses, $[]._links.statuses.href, $[].author_association, $[].auto_merge, $[].base.repo, $[].base.repo.allow_forking, $[].base.repo.archive_url, $[].base.repo.archived, $[].base.repo.assignees_url, $[].base.repo.blobs_url, $[].base.repo.branches_url, $[].base.repo.clone_url, $[].base.repo.collaborators_url, $[].base.repo.comments_url, $[].base.repo.commits_url, $[].base.repo.compare_url, $[].base.repo.contents_url, $[].base.repo.contributors_url, $[].base.repo.created_at, $[].base.repo.default_branch, $[].base.repo.deployments_url, $[].base.repo.description, $[].base.repo.disabled, $[].base.repo.downloads_url, $[].base.repo.events_url, $[].base.repo.fork, $[].base.repo.forks, $[].base.repo.forks_count, $[].base.repo.forks_url, $[].base.repo.full_name, $[].base.repo.git_commits_url, $[].base.repo.git_refs_url, $[].base.repo.git_tags_url, $[].base.repo.git_url, $[].base.repo.has_discussions, $[].base.repo.has_downloads, $[].base.repo.has_issues, $[].base.repo.has_pages, $[].base.repo.has_projects, $[].base.repo.has_pull_requests, $[].base.repo.has_wiki, $[].base.repo.homepage, $[].base.repo.hooks_url, $[].base.repo.html_url, $[].base.repo.id, $[].base.repo.is_template, $[].base.repo.issue_comment_url, $[].base.repo.issue_events_url, $[].base.repo.issues_url, $[].base.repo.keys_url, $[].base.repo.labels_url, $[].base.repo.language, $[].base.repo.languages_url, $[].base.repo.license, $[].base.repo.license.key, $[].base.repo.license.name, $[].base.repo.license.node_id, $[].base.repo.license.spdx_id, $[].base.repo.license.url, $[].base.repo.merges_url, $[].base.repo.milestones_url, $[].base.repo.mirror_url, $[].base.repo.name, $[].base.repo.node_id, $[].base.repo.notifications_url, $[].base.repo.open_issues, $[].base.repo.open_issues_count, $[].base.repo.owner, $[].base.repo.owner.avatar_url, $[].base.repo.owner.events_url, $[].base.repo.owner.followers_url, $[].base.repo.owner.following_url, $[].base.repo.owner.gists_url, $[].base.repo.owner.gravatar_id, $[].base.repo.owner.html_url, $[].base.repo.owner.id, $[].base.repo.owner.login, $[].base.repo.owner.node_id, $[].base.repo.owner.organizations_url, $[].base.repo.owner.received_events_url, $[].base.repo.owner.repos_url, $[].base.repo.owner.site_admin, $[].base.repo.owner.starred_url, $[].base.repo.owner.subscriptions_url, $[].base.repo.owner.type, $[].base.repo.owner.url, $[].base.repo.owner.user_view_type, $[].base.repo.private, $[].base.repo.pull_request_creation_policy, $[].base.repo.pulls_url, $[].base.repo.pushed_at, $[].base.repo.releases_url, $[].base.repo.size, $[].base.repo.ssh_url, $[].base.repo.stargazers_count, $[].base.repo.stargazers_url, $[].base.repo.statuses_url, $[].base.repo.subscribers_url, $[].base.repo.subscription_url, $[].base.repo.svn_url, $[].base.repo.tags_url, $[].base.repo.teams_url, $[].base.repo.topics, $[].base.repo.topics[], $[].base.repo.trees_url, $[].base.repo.updated_at, $[].base.repo.url, $[].base.repo.visibility, $[].base.repo.watchers, $[].base.repo.watchers_count, $[].base.repo.web_commit_signoff_required, $[].base.user, $[].base.user.avatar_url, $[].base.user.events_url, $[].base.user.followers_url, $[].base.user.following_url, $[].base.user.gists_url, $[].base.user.gravatar_id, $[].base.user.html_url, $[].base.user.id, $[].base.user.login, $[].base.user.node_id, $[].base.user.organizations_url, $[].base.user.received_events_url, $[].base.user.repos_url, $[].base.user.site_admin, $[].base.user.starred_url, $[].base.user.subscriptions_url, $[].base.user.type, $[].base.user.url, $[].base.user.user_view_type, $[].comments_url, $[].commits_url, $[].diff_url, $[].head.repo, $[].head.repo.allow_forking, $[].head.repo.archive_url, $[].head.repo.archived, $[].head.repo.assignees_url, $[].head.repo.blobs_url, $[].head.repo.branches_url, $[].head.repo.clone_url, $[].head.repo.collaborators_url, $[].head.repo.comments_url, $[].head.repo.commits_url, $[].head.repo.compare_url, $[].head.repo.contents_url, $[].head.repo.contributors_url, $[].head.repo.created_at, $[].head.repo.default_branch, $[].head.repo.deployments_url, $[].head.repo.description, $[].head.repo.disabled, $[].head.repo.downloads_url, $[].head.repo.events_url, $[].head.repo.fork, $[].head.repo.forks, $[].head.repo.forks_count, $[].head.repo.forks_url, $[].head.repo.full_name, $[].head.repo.git_commits_url, $[].head.repo.git_refs_url, $[].head.repo.git_tags_url, $[].head.repo.git_url, $[].head.repo.has_discussions, $[].head.repo.has_downloads, $[].head.repo.has_issues, $[].head.repo.has_pages, $[].head.repo.has_projects, $[].head.repo.has_pull_requests, $[].head.repo.has_wiki, $[].head.repo.homepage, $[].head.repo.hooks_url, $[].head.repo.html_url, $[].head.repo.id, $[].head.repo.is_template, $[].head.repo.issue_comment_url, $[].head.repo.issue_events_url, $[].head.repo.issues_url, $[].head.repo.keys_url, $[].head.repo.labels_url, $[].head.repo.language, $[].head.repo.languages_url, $[].head.repo.license, $[].head.repo.license.key, $[].head.repo.license.name, $[].head.repo.license.node_id, $[].head.repo.license.spdx_id, $[].head.repo.license.url, $[].head.repo.merges_url, $[].head.repo.milestones_url, $[].head.repo.mirror_url, $[].head.repo.name, $[].head.repo.node_id, $[].head.repo.notifications_url, $[].head.repo.open_issues, $[].head.repo.open_issues_count, $[].head.repo.owner, $[].head.repo.owner.avatar_url, $[].head.repo.owner.events_url, $[].head.repo.owner.followers_url, $[].head.repo.owner.following_url, $[].head.repo.owner.gists_url, $[].head.repo.owner.gravatar_id, $[].head.repo.owner.html_url, $[].head.repo.owner.id, $[].head.repo.owner.login, $[].head.repo.owner.node_id, $[].head.repo.owner.organizations_url, $[].head.repo.owner.received_events_url, $[].head.repo.owner.repos_url, $[].head.repo.owner.site_admin, $[].head.repo.owner.starred_url, $[].head.repo.owner.subscriptions_url, $[].head.repo.owner.type, $[].head.repo.owner.url, $[].head.repo.owner.user_view_type, $[].head.repo.private, $[].head.repo.pull_request_creation_policy, $[].head.repo.pulls_url, $[].head.repo.pushed_at, $[].head.repo.releases_url, $[].head.repo.size, $[].head.repo.ssh_url, $[].head.repo.stargazers_count, $[].head.repo.stargazers_url, $[].head.repo.statuses_url, $[].head.repo.subscribers_url, $[].head.repo.subscription_url, $[].head.repo.svn_url, $[].head.repo.tags_url, $[].head.repo.teams_url, $[].head.repo.topics, $[].head.repo.topics[], $[].head.repo.trees_url, $[].head.repo.updated_at, $[].head.repo.url, $[].head.repo.visibility, $[].head.repo.watchers, $[].head.repo.watchers_count, $[].head.repo.web_commit_signoff_required, $[].head.user, $[].head.user.avatar_url, $[].head.user.events_url, $[].head.user.followers_url, $[].head.user.following_url, $[].head.user.gists_url, $[].head.user.gravatar_id, $[].head.user.html_url, $[].head.user.id, $[].head.user.login, $[].head.user.node_id, $[].head.user.organizations_url, $[].head.user.received_events_url, $[].head.user.repos_url, $[].head.user.site_admin, $[].head.user.starred_url, $[].head.user.subscriptions_url, $[].head.user.type, $[].head.user.url, $[].head.user.user_view_type, $[].patch_url, $[].requested_teams, $[].review_comment_url, $[].review_comments_url, $[].statuses_url, $[].user.events_url, $[].user.followers_url, $[].user.following_url, $[].user.gists_url, $[].user.gravatar_id, $[].user.organizations_url, $[].user.received_events_url, $[].user.starred_url, $[].user.subscriptions_url, $[].user.user_view_type

Нет у нас — все вызовы диалекта, полей: 98.

У приложенных файлов (assets[]) нет адреса-описания url, суммы digest и карточки загрузившего (uploader): кто загрузил файл, GitRiver не записывает; скачивание — по browser_download_url. Нет upload_url: загрузка файлов через этот слой не поддержана. Нет реакций, обсуждения, target_commitish, immutable, mentions_count; у автора нет шаблонов адресов *_url к неподдержанным вызовам. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.assets[].digest, $.assets[].uploader, $.assets[].uploader.avatar_url, $.assets[].uploader.events_url, $.assets[].uploader.followers_url, $.assets[].uploader.following_url, $.assets[].uploader.gists_url, $.assets[].uploader.gravatar_id, $.assets[].uploader.html_url, $.assets[].uploader.id, $.assets[].uploader.login, $.assets[].uploader.node_id, $.assets[].uploader.organizations_url, $.assets[].uploader.received_events_url, $.assets[].uploader.repos_url, $.assets[].uploader.site_admin, $.assets[].uploader.starred_url, $.assets[].uploader.subscriptions_url, $.assets[].uploader.type, $.assets[].uploader.url, $.assets[].uploader.user_view_type, $.assets[].url, $.author.events_url, $.author.followers_url, $.author.following_url, $.author.gists_url, $.author.gravatar_id, $.author.organizations_url, $.author.received_events_url, $.author.repos_url, $.author.starred_url, $.author.subscriptions_url, $.author.user_view_type, $.discussion_url, $.immutable, $.reactions, $.reactions.+1, $.reactions.-1, $.reactions.confused, $.reactions.eyes, $.reactions.heart, $.reactions.hooray, $.reactions.laugh, $.reactions.rocket, $.reactions.total_count, $.reactions.url, $.target_commitish, $.updated_at, $.upload_url, $[].assets[].digest, $[].assets[].uploader, $[].assets[].uploader.avatar_url, $[].assets[].uploader.events_url, $[].assets[].uploader.followers_url, $[].assets[].uploader.following_url, $[].assets[].uploader.gists_url, $[].assets[].uploader.gravatar_id, $[].assets[].uploader.html_url, $[].assets[].uploader.id, $[].assets[].uploader.login, $[].assets[].uploader.node_id, $[].assets[].uploader.organizations_url, $[].assets[].uploader.received_events_url, $[].assets[].uploader.repos_url, $[].assets[].uploader.site_admin, $[].assets[].uploader.starred_url, $[].assets[].uploader.subscriptions_url, $[].assets[].uploader.type, $[].assets[].uploader.url, $[].assets[].uploader.user_view_type, $[].assets[].url, $[].author.events_url, $[].author.followers_url, $[].author.following_url, $[].author.gists_url, $[].author.gravatar_id, $[].author.organizations_url, $[].author.received_events_url, $[].author.repos_url, $[].author.starred_url, $[].author.subscriptions_url, $[].author.user_view_type, $[].discussion_url, $[].immutable, $[].mentions_count, $[].reactions, $[].reactions.+1, $[].reactions.-1, $[].reactions.confused, $[].reactions.eyes, $[].reactions.heart, $[].reactions.hooray, $[].reactions.laugh, $[].reactions.rocket, $[].reactions.total_count, $[].reactions.url, $[].target_commitish, $[].upload_url

Нет у нас — все вызовы диалекта, полей: 95.

Карточки автора и коммитера как участников сервера (author, committer верхнего уровня) не отдаются: имя, почта и время — в commit.author и commit.committer. Нет сведений о подписи коммита (commit.verification), comments_url и sha у записей files[]. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.author, $.author.avatar_url, $.author.events_url, $.author.followers_url, $.author.following_url, $.author.gists_url, $.author.gravatar_id, $.author.html_url, $.author.id, $.author.login, $.author.node_id, $.author.organizations_url, $.author.received_events_url, $.author.repos_url, $.author.site_admin, $.author.starred_url, $.author.subscriptions_url, $.author.type, $.author.url, $.author.user_view_type, $.comments_url, $.commit.verification, $.commit.verification.payload, $.commit.verification.reason, $.commit.verification.signature, $.commit.verification.verified, $.commit.verification.verified_at, $.committer, $.committer.avatar_url, $.committer.events_url, $.committer.followers_url, $.committer.following_url, $.committer.gists_url, $.committer.gravatar_id, $.committer.html_url, $.committer.id, $.committer.login, $.committer.node_id, $.committer.organizations_url, $.committer.received_events_url, $.committer.repos_url, $.committer.site_admin, $.committer.starred_url, $.committer.subscriptions_url, $.committer.type, $.committer.url, $.committer.user_view_type, $.files[].sha, $[].author, $[].author.avatar_url, $[].author.events_url, $[].author.followers_url, $[].author.following_url, $[].author.gists_url, $[].author.gravatar_id, $[].author.html_url, $[].author.id, $[].author.login, $[].author.node_id, $[].author.organizations_url, $[].author.received_events_url, $[].author.repos_url, $[].author.site_admin, $[].author.starred_url, $[].author.subscriptions_url, $[].author.type, $[].author.url, $[].author.user_view_type, $[].comments_url, $[].commit.verification, $[].commit.verification.payload, $[].commit.verification.reason, $[].commit.verification.signature, $[].commit.verification.verified, $[].commit.verification.verified_at, $[].committer, $[].committer.avatar_url, $[].committer.events_url, $[].committer.followers_url, $[].committer.following_url, $[].committer.gists_url, $[].committer.gravatar_id, $[].committer.html_url, $[].committer.id, $[].committer.login, $[].committer.node_id, $[].committer.organizations_url, $[].committer.received_events_url, $[].committer.repos_url, $[].committer.site_admin, $[].committer.starred_url, $[].committer.subscriptions_url, $[].committer.type, $[].committer.url, $[].committer.user_view_type

Нет у нас — все вызовы диалекта, полей: 47.

У карточки репозитория в сводном состоянии (repository) и её владельца нет шаблонов адресов *_url к неподдержанным вызовам; у автора состояния (creator) — тоже. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.repository.archive_url, $.repository.assignees_url, $.repository.blobs_url, $.repository.collaborators_url, $.repository.comments_url, $.repository.compare_url, $.repository.contributors_url, $.repository.deployments_url, $.repository.downloads_url, $.repository.events_url, $.repository.forks_url, $.repository.git_commits_url, $.repository.git_refs_url, $.repository.git_tags_url, $.repository.issue_comment_url, $.repository.issue_events_url, $.repository.keys_url, $.repository.labels_url, $.repository.languages_url, $.repository.merges_url, $.repository.milestones_url, $.repository.notifications_url, $.repository.owner.events_url, $.repository.owner.followers_url, $.repository.owner.following_url, $.repository.owner.gists_url, $.repository.owner.gravatar_id, $.repository.owner.organizations_url, $.repository.owner.received_events_url, $.repository.owner.starred_url, $.repository.owner.subscriptions_url, $.repository.owner.user_view_type, $.repository.stargazers_url, $.repository.subscribers_url, $.repository.subscription_url, $.repository.tags_url, $.repository.teams_url, $[].creator.events_url, $[].creator.followers_url, $[].creator.following_url, $[].creator.gists_url, $[].creator.gravatar_id, $[].creator.organizations_url, $[].creator.received_events_url, $[].creator.starred_url, $[].creator.subscriptions_url, $[].creator.user_view_type

Нет у нас — все вызовы диалекта, полей: 76.

У ветки вложенный commit несёт только sha и url: полный коммит даёт GET /repos/{owner}/{repo}/commits/{sha}. protection и protection_url описывают правила защиты в понятиях ГитХаба (обязательные проверки, рецензии, ограничения принудительной отправки): состав правил в GitRiver другой, и в форму ГитХаба он не переводится. Защищена ли ветка, показывает поле protected. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.commit.author, $.commit.author.avatar_url, $.commit.author.events_url, $.commit.author.followers_url, $.commit.author.following_url, $.commit.author.gists_url, $.commit.author.gravatar_id, $.commit.author.html_url, $.commit.author.id, $.commit.author.login, $.commit.author.node_id, $.commit.author.organizations_url, $.commit.author.received_events_url, $.commit.author.repos_url, $.commit.author.site_admin, $.commit.author.starred_url, $.commit.author.subscriptions_url, $.commit.author.type, $.commit.author.url, $.commit.author.user_view_type, $.commit.comments_url, $.commit.commit, $.commit.commit.author, $.commit.commit.author.date, $.commit.commit.author.email, $.commit.commit.author.name, $.commit.commit.comment_count, $.commit.commit.committer, $.commit.commit.committer.date, $.commit.commit.committer.email, $.commit.commit.committer.name, $.commit.commit.message, $.commit.commit.tree, $.commit.commit.tree.sha, $.commit.commit.tree.url, $.commit.commit.url, $.commit.commit.verification, $.commit.commit.verification.payload, $.commit.commit.verification.reason, $.commit.commit.verification.signature, $.commit.commit.verification.verified, $.commit.commit.verification.verified_at, $.commit.committer, $.commit.committer.avatar_url, $.commit.committer.events_url, $.commit.committer.followers_url, $.commit.committer.following_url, $.commit.committer.gists_url, $.commit.committer.gravatar_id, $.commit.committer.html_url, $.commit.committer.id, $.commit.committer.login, $.commit.committer.node_id, $.commit.committer.organizations_url, $.commit.committer.received_events_url, $.commit.committer.repos_url, $.commit.committer.site_admin, $.commit.committer.starred_url, $.commit.committer.subscriptions_url, $.commit.committer.type, $.commit.committer.url, $.commit.committer.user_view_type, $.commit.html_url, $.commit.node_id, $.commit.parents, $.commit.parents[], $.commit.parents[].html_url, $.commit.parents[].sha, $.commit.parents[].url, $.protection, $.protection.enabled, $.protection.required_status_checks, $.protection.required_status_checks.checks, $.protection.required_status_checks.contexts, $.protection.required_status_checks.enforcement_level, $.protection_url

Нет у нас — все вызовы диалекта, полей: 4.

git_url ведёт к вызову /git/blobs/{sha}, которого слой не поддерживает; _links.git — тот же адрес. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$._links.git, $.git_url, $[]._links.git, $[].git_url

Нет у нас — все вызовы диалекта, полей: 1.

Поле documentation_url в теле отказа не отдаётся: у ГитХаба оно ведёт на его собственную документацию. Поле необязательное. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.documentation_url

Нет у нас — все вызовы диалекта, полей: 30.

Корень интерфейса ГитХаба перечисляет шаблоны адресов ВСЕХ вызовов платформы. Корень GitRiver называет только те, которые слой поддерживает. Поле уходит из перечня в том выпуске, где слой начинает его отдавать.

Поля

$.authorizations_url, $.code_search_url, $.commit_search_url, $.current_user_authorizations_html_url, $.current_user_repositories_url, $.emails_url, $.emojis_url, $.events_url, $.feeds_url, $.followers_url, $.following_url, $.gists_url, $.hub_url, $.issue_search_url, $.issues_url, $.keys_url, $.label_search_url, $.notifications_url, $.organization_repositories_url, $.organization_teams_url, $.organization_url, $.public_gists_url, $.rate_limit_url, $.repository_search_url, $.starred_gists_url, $.starred_url, $.topic_search_url, $.user_organizations_url, $.user_repositories_url, $.user_search_url

У нас всегда пусто — все вызовы диалекта, полей: 2.

Поле есть, но всегда пусто: время закрытия вехи GitRiver не хранит. Поле уходит из перечня в том выпуске, где слой начинает его заполнять.

Поля

$.milestone.closed_at, $[].milestone.closed_at

У нас всегда пусто — все вызовы диалекта, полей: 2.

Поле есть, но у ОТКРЫТОГО запроса всегда пусто: у ГитХаба оно указывает на пробное слияние, подготовленное заранее, а GitRiver пробного слияния не делает — коммит слияния появляется только при слиянии. У слитого запроса поле заполнено. Поле уходит из перечня в том выпуске, где слой начинает его заполнять.

Поля

$.merge_commit_sha, $[].merge_commit_sha

Вызовы вне перечня

Вызов Что учесть
hooks состав полей ответа с ГитХабом не сопоставлен; отличия, если они есть, выше не названы