Skip to content

REST API: Clarify the invalid stored value error messages - #14840

Open
dannflorea wants to merge 1 commit into
WordPress:trunkfrom
dannflorea:64019-rest-invalid-stored-value-message
Open

dannflorea wants to merge 1 commit into
WordPress:trunkfrom
dannflorea:64019-rest-invalid-stored-value-message

Conversation

@dannflorea

Copy link
Copy Markdown

Trac ticket: https://core.trac.wordpress.org/ticket/64019

What

Rewords the rest_invalid_stored_value error messages so they explain the actual cause. The error code and 500 status are unchanged for back-compat.

All three messages share one mechanism: when a stored value fails schema validation, the REST API returns it as null. A client that echoes the response back (as the block editor does) sends that null, and the update is refused so the stored data is not deleted.

  • Single meta (WP_REST_Meta_Fields::update_value()): "The %s meta field cannot be reset to null because its stored value does not match its registered schema."
  • Non-single meta with null items: "The %s meta field cannot be updated because the request contains null values. This usually means one or more of its stored values do not match its registered schema."
  • Settings (WP_REST_Settings_Controller::update_item()): "The %s setting cannot be reset to null because its stored value does not match its registered schema."

Tests

The two meta field code paths had no coverage for rest_invalid_stored_value. Added tests for both, including the echo-back case, asserting the stored values are left untouched.

Testing instructions

  1. Register an integer meta: register_post_meta( 'post', 'my_int', array( 'type' => 'integer', 'single' => true, 'show_in_rest' => true ) );
  2. Store an invalid value directly: update_post_meta( $post_id, 'my_int', 'not-a-number' );
  3. GET /wp/v2/posts/<id> returns "my_int": null.
  4. POST /wp/v2/posts/<id> with {"meta":{"my_int":null}} returns 500 with the new message, and the stored value is unchanged.

Reproduced and verified on trunk with WordPress Playground (nightly, PHP 8.3).

Explain that a null reset is refused because the stored value does not match the registered schema, and add tests for the meta field cases.

See #64019.
@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs.

Core Committers: Use this line as a base for the props when committing in SVN:

Props maxdevagency.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.


Props Bot commands

You can trigger Props Bot actions by commenting on this PR:

  • @propsbot add <username> to give props to a GitHub user. Requires write access.
  • @propsbot remove <username> to leave a user out of the props. Requires write access.
  • @propsbot refresh to refresh this list. Adding the props-bot label works too.

@github-actions

Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant