From d6bc4d3b496bdc5ccd41c70adbe020c39c296d2b Mon Sep 17 00:00:00 2001 From: Itamar Givon Date: Wed, 26 Feb 2025 17:19:48 +0100 Subject: [PATCH] REST: Remove deprecated v0 routes and handlers Bug: T383774 Change-Id: Icd9169a5c7d43e9abcd0b9b4e62e24e0696777ac --- .../crud/src/RouteHandlers/V0RouteHandler.php | 60 ---- .../tests/mocha/api-testing/V0ErrorTest.js | 53 --- repo/rest-api/README.md | 6 - repo/rest-api/routes.json | 303 +----------------- .../tests/mocha/helpers/RequestBuilder.js | 8 - 5 files changed, 1 insertion(+), 429 deletions(-) delete mode 100644 repo/domains/crud/src/RouteHandlers/V0RouteHandler.php delete mode 100644 repo/domains/crud/tests/mocha/api-testing/V0ErrorTest.js diff --git a/repo/domains/crud/src/RouteHandlers/V0RouteHandler.php b/repo/domains/crud/src/RouteHandlers/V0RouteHandler.php deleted file mode 100644 index 0a93d6b046f..00000000000 --- a/repo/domains/crud/src/RouteHandlers/V0RouteHandler.php +++ /dev/null @@ -1,60 +0,0 @@ -newErrorResponse( - UseCaseError::RESOURCE_NOT_FOUND, - "v0 has been removed, please modify your routes to v1 such as '/rest.php/wikibase/v1'" - ); - } - - public function getParamSettings(): array { - return [ - self::ITEM_ID_PATH_PARAM => [ - self::PARAM_SOURCE => 'path', - ParamValidator::PARAM_TYPE => 'string', - ParamValidator::PARAM_REQUIRED => false, - ], - self::PROPERTY_ID_PATH_PARAM => [ - self::PARAM_SOURCE => 'path', - ParamValidator::PARAM_TYPE => 'string', - ParamValidator::PARAM_REQUIRED => false, - ], - self::STATEMENT_ID_PATH_PARAM => [ - self::PARAM_SOURCE => 'path', - ParamValidator::PARAM_TYPE => 'string', - ParamValidator::PARAM_REQUIRED => false, - ], - self::LANGUAGE_CODE_PATH_PARAM => [ - self::PARAM_SOURCE => 'path', - ParamValidator::PARAM_TYPE => 'string', - ParamValidator::PARAM_REQUIRED => false, - ], - self::SITE_ID_PATH_PARAM => [ - self::PARAM_SOURCE => 'path', - ParamValidator::PARAM_TYPE => 'string', - ParamValidator::PARAM_REQUIRED => false, - ], - ]; - } -} diff --git a/repo/domains/crud/tests/mocha/api-testing/V0ErrorTest.js b/repo/domains/crud/tests/mocha/api-testing/V0ErrorTest.js deleted file mode 100644 index db44e0a67b4..00000000000 --- a/repo/domains/crud/tests/mocha/api-testing/V0ErrorTest.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -const { describeWithTestData } = require( '../helpers/describeWithTestData' ); -const { assert } = require( 'api-testing' ); -const { expect } = require( '../../../../../rest-api/tests/mocha/helpers/chaiHelper' ); -const { RequestBuilder } = require( '../../../../../rest-api/tests/mocha/helpers/RequestBuilder' ); -const { - getItemGetRequests, - getPropertyGetRequests, - getItemEditRequests, - getPropertyEditRequests, - getItemCreateRequest -} = require( '../helpers/happyPathRequestBuilders' ); - -describeWithTestData( 'V0Error', ( itemRequestInputs, propertyRequestInputs, describeEachRouteWithReset ) => { - - const adminRequests = [ - { newRequestBuilder: () => new RequestBuilder().withRoute( 'GET', '/v1/property-data-types' ) }, - { newRequestBuilder: () => new RequestBuilder().withRoute( 'GET', '/v1/openapi.json' ) } - ]; - - const editRequests = [ - ...getItemEditRequests( itemRequestInputs ), - ...getPropertyEditRequests( propertyRequestInputs ) - ]; - const allRoutes = [ - ...adminRequests, - ...editRequests, - ...getItemGetRequests( itemRequestInputs ), - ...getPropertyGetRequests( propertyRequestInputs ), - getItemCreateRequest( itemRequestInputs ) - ]; - - describe( 'v0 error', () => { - describeEachRouteWithReset( allRoutes, ( newRequestBuilder ) => { - it( 'responds with v0-has-been-removed error', async () => { - const builder = newRequestBuilder(); - const response = await builder - .withRoute( builder.method, builder.route.replace( 'v1', 'v0' ) ) - .skipRouteValidation() - .makeRequest(); - - expect( response ).to.have.status( 404 ); - assert.strictEqual( response.body.code, 'resource-not-found' ); - assert.strictEqual( - response.body.message, - 'v0 has been removed, please modify your routes to v1 such as \'/rest.php/wikibase/v1\'' - ); - } ); - - } ); - } ); -} ); diff --git a/repo/rest-api/README.md b/repo/rest-api/README.md index 1a5fe996740..04f0dabc9b1 100644 --- a/repo/rest-api/README.md +++ b/repo/rest-api/README.md @@ -6,12 +6,6 @@ **As of REL1_44, the Wikibase REST API is enabled when the Wikibase repo extension is loaded** -To enable the production-ready routes, in versions prior to REL1_44, add the following line to your `LocalSettings.php` file: - -```php -$wgRestAPIAdditionalRouteFiles[] = 'extensions/Wikibase/repo/rest-api/routes.json'; -``` - To enable routes in development (not recommended for production use), also add: ```php diff --git a/repo/rest-api/routes.json b/repo/rest-api/routes.json index 5688d4e98ec..fe51488c706 100644 --- a/repo/rest-api/routes.json +++ b/repo/rest-api/routes.json @@ -1,302 +1 @@ -[ - { - "path": "/wikibase/v0/entities/items/{item_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items", - "method": "POST", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements", - "method": "POST", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements", - "method": "POST", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/statements/{statement_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements/{statement_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements/{statement_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/statements/{statement_id}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements/{statement_id}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements/{statement_id}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/statements/{statement_id}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements/{statement_id}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements/{statement_id}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/statements/{statement_id}", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/statements/{statement_id}", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/statements/{statement_id}", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels_with_language_fallback/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels_with_language_fallback/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels/{language_code}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels/{language_code}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/labels/{language_code}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/labels/{language_code}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions_with_language_fallback/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions_with_language_fallback/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions/{language_code}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions/{language_code}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/descriptions/{language_code}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions/{language_code}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/aliases", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/descriptions", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/aliases", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/aliases", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/aliases", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/aliases/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/aliases/{language_code}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/aliases/{language_code}", - "method": "POST", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/properties/{property_id}/aliases/{language_code}", - "method": "POST", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/sitelinks", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/sitelinks", - "method": "PATCH", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/sitelinks/{site_id}", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/sitelinks/{site_id}", - "method": "DELETE", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/entities/items/{item_id}/sitelinks/{site_id}", - "method": "PUT", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/openapi.json", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - }, - { - "path": "/wikibase/v0/property-data-types", - "method": "GET", - "factory": "Wikibase\\Repo\\Domains\\Crud\\RouteHandlers\\V0RouteHandler::factory" - } -] +[] diff --git a/repo/rest-api/tests/mocha/helpers/RequestBuilder.js b/repo/rest-api/tests/mocha/helpers/RequestBuilder.js index 37b00af5487..e7af47e5d64 100644 --- a/repo/rest-api/tests/mocha/helpers/RequestBuilder.js +++ b/repo/rest-api/tests/mocha/helpers/RequestBuilder.js @@ -35,14 +35,6 @@ class RequestBuilder { return this; } - /** - * @return {this} - */ - skipRouteValidation() { - this.validateRoute = false; - return this; - } - /** * @param {string} name path param name, e.g. 'item_id' for /v1/entities/items/{item_id} * @param {string} value