As a tool builder I want to be able to change labels of an item so that work in my tool can be saved back to Wikidata.
PATCH /entities/items/{item_id}/labels
Response of a successful response:
* 200 HTTP response
* response body containing the updated labels data, using the similar structure as `GET /entities/items/{item_id}/labels`.
* Should also include ETag and Last-Modified headers of the latest revision ID of the relevant item.
"Autocomments":
* should mimic the `wbeditentity` behavior when editing labels/descriptions/aliases:
* If the change results in changing labels in not more than 50 languages: `/* wbeditentity-update-languages-short:0||LANGS */`
* If the change results in changing labels in 51 or more languages: `/* wbeditentity-update-languages:0||LANG_COUNT */`
* where `LANGS` is a comma separated list of language codes of relevant languages (e.g. `en, de, es, fr, fi, it`). `LANG_COUNT` is a number of languages with changed labels
* the boundary number of 50 languages is defined in `ChangedLanguagesCounter::SHORTENED_SUMMARY_MAX_EDIT` constant (not configurable)
Error cases considered:
<table>
<tr>
<td>item with the given ID does not exist</td>
<td>404</td>
<td>
`"code": "item-not-found",`
`"message": "Could not find an item with the ID: {item_id}"`
</td>
</tr>
<tr>
<td>ID provided is not a valid item ID</td>
<td>400</td>
<td>
` "code": "invalid-item-id",`
`"message": "Not a valid item ID: {item_id}"`
</td>
</tr>
<tr>
<td>Invalid JSON patch (general error)</td>
<td>400</td>
<td>
`"code": "invalid-patch"`
`"message": "The provided patch is invalid"`
</td>
</tr>
<tr>
<td></td>
<td>400</td>
<td>
</td>
</tr>
<tr>
<td>JSON patch test operation failed</td>
<td>409</td>
<td>
`"code": "patch-test-failed",`
`"message": "Test operation in the provided patch failed. At path '{path}' expected '{expected}', actual: '{actual}'",`
`"context": ...`
</td>
</tr>
</table>
- input JSON patch invalid (similar to T306934 behavior)
- after changes, label or labels are not valid (empty, too long)
- after changes, invalid language code is used for one or multiple languages
- after changes, a duplicate label/description error occurs (unless errors happen very often, can rely on Wikibase saving logic preventing saving the duplicates, and leaving the 500 HTTP response "unexpected-error" for the first increment)
Note:
* whitespace trimming of changed labels to happen "silently" (i.e. accept the label with leading/trailing whitespace but remove it before saving)
* we allow all patch operations (including "move", "copy", etc) even if they likely are not useful
**Examples**:
Add a label in French and Bavarian:
```
{
{ "op": "add", "path": "/fr", "value": "pomme de terre" },
{ "op": "add", "path": "/bar", "value": "Erdapfel" }
}
```
Remove the German label
```
{
{ "op": "remove", "path": "/de" }
}
```
Replace English label if it it is "tater":
```
{
{ "op": "test", "path": "/en", "value": "tater" },
{ "op": "replace", "path": "/en", "value": "potato" }
}
```