As a developer, I want to be able to create a new Wikibase property in its entirety
POST rest.php/wikibase/v0/entities/properties
{ "property": { "data_type": "string" (required) "labels": {}, "descriptions": {}, "aliases": {}, "statements": {} }, "comment":... "tags": [... ] "bot": false }
Acceptance criteria
- 201 response code on success, with JSON representation of the property created (same structure as GET../property/P123resource) and location header in the successful creation response
- Ignore HTTP conditional request headers
- Ignore id and type fields, and any unrecognized fields if provided in the request payload
- Error causes to be similar to PATCH properties
- ETag, last-modified and location (URI of the newly created item) as response headers.
- Handle user authentication/authorization like inPOST /entities/items/{item_id}
- Client can provide additional edit metadata: mediawiki tags, edit summary text to append to the automated summary, and a bot edit flag, like in POST /entities/items/{item_id}
Error cases to consider
- 400, value-too-long
- 400, statement-group-property-id-mismatch
- 400, referenced-resource-not-found
- 400, invalid-value (invalid data type should be covered here)
- 400, missing-field (missing data type should be covered here)
- 400, invalid-key
- 400, resource-too-large
- 403, permission denied (incl. property specificproperty-createpermission)
- 422, data policy violation (property-label-duplicate and label-description-same-value)
- 429, request limit reached
Task breakdown
add to OAS(T377147)- happy path (T377148)
- addPropertyCreatorinterface and implementation
- include revision ID and last modified date
- edit summary
- authorization
- add new method toPermissionChecker::canCreateProperty( User $user ): booland implement it
- top-level field validation
- check top level field types
- check that the data_type field is present
- consider implementing this as a regular use case validator instead of creating aRequestValidatingDeserializer,because theRequestValidatingDeserializerwould only be usable for this one use case
- field validation
- apply middlewares (the usual ones except the one for conditional requests), useUpdateExceptionHandlerin the use case, and add the new route to RouteHandlersTest
- spec tests
- mark production ready, update changelog and OpenAPI interface version