Навигация
Совместимость с интерфейсом ГитХаба
Слой совместимости с ГитХабом: какие вызовы его 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 |
состав полей ответа с ГитХабом не сопоставлен; отличия, если они есть, выше не названы |