Skip to content

Commit

Permalink
Merge "REST: Split OpenAPI document into domain fragments"
Browse files Browse the repository at this point in the history
  • Loading branch information
jenkins-bot authored and Gerrit Code Review committed Feb 7, 2025
2 parents 398fa5d + 71bdd9a commit d639a7b
Show file tree
Hide file tree
Showing 11 changed files with 2,257 additions and 322 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ tests/browser/config/config.yml
.api-testing.config.json
repo/domains/crud/tests/mocha/helpers/.test-user-credentials.json

# Generated
repo/rest-api/specs/openapi-joined.json

# Doxygen
docs/php
docs/*.tmp
Expand Down
8 changes: 8 additions & 0 deletions repo/domains/crud/specs/global/tags.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,13 @@
"description": "Wikibase Data Model - Statements",
"url": "https://www.mediawiki.org/wiki/Wikibase/DataModel#Statements"
}
},
{
"name": "Property data types",
"description": "Wikibase Property Data Types",
"externalDocs": {
"description": "Wikibase Dataytpes",
"url": "https://doc.wikimedia.org/Wikibase/master/php/docs_topics_datatypes.html"
}
}
]
134 changes: 134 additions & 0 deletions repo/domains/crud/specs/index.fragment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
{
"openapi": "3.1.0",
"info": {
"title": "Wikibase CRUD Domain REST API",
"version": "1.1",
"description": "OpenAPI fragment of the Wikibase CRUD domain REST API"
},
"paths": {
"/v1/property-data-types": {
"get": {
"operationId": "getPropertyDataTypes",
"tags": [ "Property data types" ],
"summary": "Retrieve the map of Property data types to value types",
"responses": {
"200": {
"description": "The map of Property data types to value types",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"example": {
"data-type": "value-type"
}
}
}
}
}
}
},
"/v1/entities/items": {
"$ref": "resources/items/list.json"
},
"/v1/entities/items/{item_id}": {
"$ref": "resources/items/single.json"
},
"/v1/entities/items/{item_id}/sitelinks": {
"$ref": "resources/sitelinks/list.json"
},
"/v1/entities/items/{item_id}/sitelinks/{site_id}": {
"$ref": "resources/sitelinks/single.json"
},
"/v1/entities/properties": {
"$ref": "resources/properties/list.json"
},
"/v1/entities/properties/{property_id}": {
"$ref": "resources/properties/single.json"
},
"/v1/entities/items/{item_id}/descriptions": {
"$ref": "resources/descriptions/list-for-item.json"
},
"/v1/entities/properties/{property_id}/descriptions": {
"$ref": "resources/descriptions/list-for-property.json"
},
"/v1/entities/items/{item_id}/descriptions/{language_code}": {
"$ref": "resources/descriptions/description-in-language-for-item.json"
},
"/v1/entities/items/{item_id}/descriptions_with_language_fallback/{language_code}": {
"$ref": "resources/descriptions/description-with-fallback-for-item.json"
},
"/v1/entities/properties/{property_id}/descriptions/{language_code}": {
"$ref": "resources/descriptions/description-in-language-for-property.json"
},
"/v1/entities/properties/{property_id}/descriptions_with_language_fallback/{language_code}": {
"$ref": "resources/descriptions/description-with-fallback-for-property.json"
},
"/v1/entities/items/{item_id}/statements": {
"$ref": "resources/statements/list-for-item.json"
},
"/v1/entities/items/{item_id}/statements/{statement_id}": {
"$ref": "resources/statements/single-for-item.json"
},
"/v1/entities/items/{item_id}/labels": {
"$ref": "resources/labels/list-for-item.json"
},
"/v1/entities/properties/{property_id}/labels": {
"$ref": "resources/labels/list-for-property.json"
},
"/v1/entities/items/{item_id}/labels/{language_code}": {
"$ref": "resources/labels/label-in-language-for-item.json"
},
"/v1/entities/items/{item_id}/labels_with_language_fallback/{language_code}": {
"$ref": "resources/labels/label-with-fallback-for-item.json"
},
"/v1/entities/properties/{property_id}/labels/{language_code}": {
"$ref": "resources/labels/label-in-language-for-property.json"
},
"/v1/entities/properties/{property_id}/labels_with_language_fallback/{language_code}": {
"$ref": "resources/labels/label-with-fallback-for-property.json"
},
"/v1/entities/items/{item_id}/aliases": {
"$ref": "resources/aliases/list-for-item.json"
},
"/v1/entities/properties/{property_id}/aliases": {
"$ref": "resources/aliases/list-for-property.json"
},
"/v1/entities/items/{item_id}/aliases/{language_code}": {
"$ref": "resources/aliases/aliases-in-language-for-item.json"
},
"/v1/entities/properties/{property_id}/aliases/{language_code}": {
"$ref": "resources/aliases/aliases-in-language-for-property.json"
},
"/v1/entities/properties/{property_id}/statements": {
"$ref": "resources/statements/list-for-property.json"
},
"/v1/entities/properties/{property_id}/statements/{statement_id}": {
"$ref": "resources/statements/single-for-property.json"
},
"/v1/statements/{statement_id}": {
"$ref": "resources/statements/single.json"
}
},
"components": {
"parameters": {
"$ref": "global/parameters.json"
},
"requestBodies": {
"$ref": "global/requests.json"
},
"responses": {
"$ref": "global/responses.json"
},
"schemas": {
"$ref": "global/schemas.json"
},
"examples": {
"$ref": "global/examples.json"
}
},
"tags": { "$ref": "global/tags.json" }
}
136 changes: 0 additions & 136 deletions repo/domains/crud/specs/resources/index.json

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const { expect } = require( '../../../../../rest-api/tests/mocha/helpers/chaiHelper' );
const { RequestBuilder } = require( '../../../../../rest-api/tests/mocha/helpers/RequestBuilder' );

describe( 'GET /property-data-types', () => {
describe( 'GET /v1/property-data-types', () => {
it( '200 OK response is valid', async () => {
const response = await new RequestBuilder()
.withRoute( 'GET', '/v1/property-data-types' )
Expand Down
35 changes: 35 additions & 0 deletions repo/domains/search/specs/index.fragment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"openapi": "3.1.0",
"info": {
"title": "Wikibase Search Domain REST API",
"version": "0.1",
"description": "OpenAPI fragment of the Wikibase Search domain REST API"
},
"paths": {
"/v0/search/items": {
"get": {
"operationId": "searchItem",
"tags": [ "item search" ],
"summary": "Simple Item search by label",
"responses": {
"200": {
"description": "A list of search results",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
}
},
"tags": [
{
"name": "item search",
"description": "Simple item search"
}
]
}
10 changes: 5 additions & 5 deletions repo/rest-api/.redocly.lint-ignore.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This file instructs Redocly's linter to ignore the rules contained for specific parts of your API.
# See https://redocly.com/docs/cli/ for more information.

../domains/crud/specs/resources/index.json:
operation-4xx-response: # Excluded as these endpoints have no 4XX error responses.
- '#/~1v1~1openapi.json/get/responses'
- '#/~1v1~1property-data-types/get/responses'
specs/openapi-joined.json:
operation-4xx-response:
- '#/paths/~1v1~1openapi.json/get/responses'
- '#/paths/~1v1~1property-data-types/get/responses'
- '#/paths/~1v0~1search~1items/get/responses'
10 changes: 6 additions & 4 deletions repo/rest-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,20 @@
"api-testing:e2e-crud": "npm run mocha -- --require ../domains/crud/tests/mocha/api-testing/fixtures.cjs ../domains/crud/tests/mocha/api-testing",
"api-testing:e2e-rest": "npm run mocha -- tests/mocha/",
"api-testing:spec-crud": "npm run mocha -- ../domains/crud/tests/mocha/openapi-validation",
"api-testing": "npm-run-all api-testing:*",
"api-testing": "npm-run-all build:spec api-testing:*",
"mocha": "mocha --timeout 0 --inline-diffs",
"lint": "npm-run-all --parallel lint:*",
"lint:openapi": "redocly lint specs/openapi.json",
"lint:openapi": "npm run spec:join && redocly lint specs/openapi-joined.json",
"lint:eslint": "eslint . --config .eslintrc.json --max-warnings 0",
"lint:eslint-crud": "eslint ../domains/crud/tests/mocha --config ../domains/crud/tests/mocha/.eslintrc.json --max-warnings 0",
"fix": "npm-run-all --parallel fix:*",
"fix:eslint": "eslint --config .eslintrc.json --fix .",
"build": "run-s build:docs build:spec",
"build": "run-s build:spec build:docs",
"build:docs": "webpack --config docs/webpack.config.js",
"serve:docs": "webpack serve --config docs/webpack.config.js --mode development",
"build:spec": "redocly bundle specs/openapi.json --dereferenced -o src/openapi.json && cp src/openapi.json ../../docs/rest-api/openapi.json"
"build:spec": "run-s spec:join spec:bundle",
"spec:join": "redocly join --without-x-tag-groups specs/openapi.json ../domains/crud/specs/index.fragment.json ../domains/search/specs/index.fragment.json -o specs/openapi-joined.json",
"spec:bundle": "redocly bundle specs/openapi-joined.json --dereferenced -o src/openapi.json"
},
"engines": {
"node": ">=18"
Expand Down
Loading

0 comments on commit d639a7b

Please sign in to comment.