Page MenuHomePhabricator

Handle redirects in GET /entities/items/{item_id}
Closed, ResolvedPublic3 Estimated Story Points

Description

As of 2022-04-11, when Wikibase REST API is asked for data of an item which is a redirect to another item, requests results in 500 HTTP response containing
{"code":"unexpected-error","message":"Unexpected error"}

Instead, the API should recognize the redirect, and point the client to the relevant resource.

BDD
GIVEN Q123 is a redirect to Q321
WHEN I make a GET request to /entities/items/Q123
THEN I receive 308 HTTP response from the API
AND Location header in the response includes the absolute path of the /entities/items/Q321 resource
AND response body is empty

GIVEN Q123 is a redirect to Q321
WHEN I make a GET request to /entities/items/Q123
AND provide _fields=labels parameter to only get labels of an item
THEN I receive 308 HTTP response from the API
AND Location header in the response includes the absolute path of the /entities/items/Q321 resource
AND the path in the response also includes _fields=labels parameter
AND response body is empty

Note:

Open question: what should happen with query parameters, are they included in the Location header in the response, or is the "raw" URL returned - @WMDE-leszek to define

Event Timeline

From task breakdown:

  • change the ItemRevisionRetriever's method signature to not return ?ItemRevision but instead return a result object inspired by Wikibase's LatestRevisionIdResult
  • create a new use case response object containing the item id of the redirect target
  • construct the location given the redirect target id and return 301 http response with the Location header

Change 779896 had a related patch set uploaded (by Jakob; author: Jakob):

[mediawiki/extensions/Wikibase@master] REST: Use ItemRevisionResult in ItemRevisionRetriever

https://gerrit.wikimedia.org/r/779896

Change 779896 abandoned by Jakob:

[mediawiki/extensions/Wikibase@master] REST: Use ItemRevisionResult in ItemRevisionRetriever

Reason:

https://gerrit.wikimedia.org/r/779896

Change 784238 had a related patch set uploaded (by Jakob; author: Jakob):

[mediawiki/extensions/Wikibase@master] REST: Use ItemRevisionResult in ItemRevisionRetriever

https://gerrit.wikimedia.org/r/784238

Change 784238 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] REST: Use ItemRevisionResult in ItemRevisionRetriever

https://gerrit.wikimedia.org/r/784238

Change 784630 had a related patch set uploaded (by Jakob; author: Jakob):

[mediawiki/extensions/Wikibase@master] REST: Handle redirects in the GetItem use case

https://gerrit.wikimedia.org/r/784630

Change 784658 had a related patch set uploaded (by Jakob; author: Jakob):

[mediawiki/extensions/Wikibase@master] REST: Respond with 301 for item redirects

https://gerrit.wikimedia.org/r/784658

Change 784630 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] REST: Handle redirects in the GetItem use case

https://gerrit.wikimedia.org/r/784630

Change 784658 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] REST: Respond with 301 for item redirects

https://gerrit.wikimedia.org/r/784658

Change 785279 had a related patch set uploaded (by Jakob; author: Jakob):

[mediawiki/extensions/Wikibase@master] REST: Add schema test for Item redirects

https://gerrit.wikimedia.org/r/785279

Change 785279 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] REST: Add schema test for Item redirects

https://gerrit.wikimedia.org/r/785279