[Schema Inaccuracy] *-roles list endpoints missing per_page/page params despite live API paginating
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Stack tecnológico
- github, json, openapi
- Área
- api
Línea de trabajo
Comienza en descriptions/ghec/ghec.2022-11-28.json y localiza las cuatro definiciones de rutas GET indicadas, comparándolas con el endpoint de equipos de organización-rol. Añade las referencias canónicas de los parámetros per-page y page junto a cada parámetro de ruta existente y, después, verifica que los cuatro endpoints afectados expongan los parámetros de paginación en sus especificaciones.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Schema Inaccuracy
Four *-roles list endpoints declare only path parameters in their spec definitions, but GitHub's live API honors per_page/page and returns standard Link: rel="next" pagination headers. Without the query params declared, OpenAPI-generated clients silently fetch page 1 only — a correctness regression once an org accumulates more than 30 roles.
Affected endpoints (all GET):
/orgs/{org}/organization-roles(orgs/list-org-roles) —api.github.comandghec/organizations/{organization_id}/custom_roles(orgs/list-custom-roles) —gheconly/orgs/{org}/custom-repository-roles(orgs/list-custom-repo-roles) —gheconly/enterprises/{enterprise}/enterprise-roles(enterprise-admin/list-enterprise-roles) —gheconly
Currently each declares only its path param, e.g.:
"parameters": [
{ "$ref": "#/components/parameters/org" }
]
The REST docs for these endpoints likewise omit the pagination parameters section, in contrast with sibling endpoints on the same docs page (e.g. "List teams that are assigned to an organization role" — /orgs/{org}/organization-roles/{role_id}/teams) which correctly declare and document per_page/page.
Expected
Each affected endpoint's parameters array should include the canonical pagination refs — matching every other paginated endpoint in the spec, including the sibling at /orgs/{org}/organization-roles/{role_id}/teams:
"parameters": [
{ "$ref": "#/components/parameters/org" },
{ "$ref": "#/components/parameters/per-page" },
{ "$ref": "#/components/parameters/page" }
]
(Substitute enterprise / organization-id for the path-param ref on each respective endpoint.)
Reproduction Steps
/orgs/{org}/organization-roles returns a Link header at per_page=1 despite the spec not declaring per_page/page:
$ gh api -i "/orgs/<org>/organization-roles?per_page=1" 2>&1 | grep -E "^(HTTP|Link)"
HTTP/2.0 200 OK
Link: <https://api.github.com/organizations/<org_id>/organization-roles?per_page=1&page=2>; rel="next", <https://api.github.com/organizations/<org_id>/organization-roles?per_page=1&page=12>; rel="last"
page is honored too — page=2 returns rel="prev" and rel="next" links:
$ gh api -i "/orgs/<org>/organization-roles?per_page=1&page=2" 2>&1 | grep "^Link"
Link: <...?per_page=1&page=1>; rel="prev", <...?per_page=1&page=3>; rel="next", <...?per_page=1&page=12>; rel="last", <...?per_page=1&page=1>; rel="first"
The other three endpoints exhibit the same Link rel="prev" behavior on page=2 against an org with at least one role/custom-role:
$ gh api -i "/organizations/<org_id>/custom_roles?per_page=1&page=2" 2>&1 | grep "^Link"
Link: <...?per_page=1&page=1>; rel="prev", <...?per_page=1&page=1>; rel="last", <...?per_page=1&page=1>; rel="first", ...
$ gh api -i "/orgs/<org>/custom-repository-roles?per_page=1&page=2" 2>&1 | grep "^Link"
Link: <...?per_page=1&page=1>; rel="prev", <...?per_page=1&page=1>; rel="last", <...?per_page=1&page=1>; rel="first"
The spec declares only the path param across all four:
$ curl -s https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/ghec/ghec.2022-11-28.json \
| jq '.paths["/orgs/{org}/organization-roles"].get.parameters'
[
{
"$ref": "#/components/parameters/org"
}
]
Same single-path-param shape for the other three endpoints.
Consumer Impact
OpenAPI-generated clients that infer pagination from declared per_page/page query parameters (the standard signal across the rest of the spec) will treat these endpoints as single-shot. Consumers that iterate organization roles to perform cleanup or audit operations will silently miss every role beyond page 1 — defaulting to page size 30, but as small as 1 if the client passes per_page=1 for cost reasons. This is undetectable without a separate Link-header check, since the response body itself is well-formed and the total_count field can easily be mistaken for "size of this response" rather than "total across all pages".
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 1.6k
- Forks
- 342
- Merge medio
- 2 h 23 min
- PR fusionados (30 d)
- 57
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de github/rest-api-description
-
feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
github/rest-api-description#7220 ·
-
feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
github/rest-api-description#7201 ·
-
feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
github/rest-api-description#7163 ·
-
Runner deprecations: registration_deprecates_at is declared on the response but never returned Abiertofeature
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
github/rest-api-description#7162 ·
-
feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
github/rest-api-description#7135 ·
Todos los issues de github/rest-api-description
Issues similares
-
Area: Excel support
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
orbeon/orbeon-forms#7893 ·
-
essnmx good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
yeti-platform/yeti#1380 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
modelcontextprotocol/python-sdk#3566 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
griptape-ai/griptape#2353 ·