Download & Extend

Switch REST to default to HAL

Project:Drupal core
Version:8.x-dev
Component:rest.module
Category:task
Priority:normal
Assigned:Unassigned
Status:closed (fixed)
Issue tags:WSCCI

Issue Summary

As explained in Proposing an alternative to application/vnd.drupal.ld+json, the new plan is to use HAL as the primary format for REST.

Comments

#1

Component:base system» rest.module
Status:active» needs review

This patch depends on #1924220: Support serialization in hal+json and #1931976: Support deserialization for hal+json (needs more language handling tests).

It also required a few small changes in the REST module. Specifically, on PATCH it ensures that the id and uuid properties from the new entity do not overwrite those of the original.

AttachmentSizeStatusTest resultOperations
1935538-01-rest-test-update.patch66.88 KBIdlePASSED: [[SimpleTest]]: [MySQL] 52,680 pass(es).View details
1935538-01-rest-test-update__for-review.txt21.41 KBIgnored: Check issue status.NoneNone

#2

Reroll since info.yml got in.

AttachmentSizeStatusTest resultOperations
1935538-02-rest-test-update.patch66.85 KBIdlePASSED: [[SimpleTest]]: [MySQL] 52,558 pass(es).View details

#3

+++ b/core/modules/rest/lib/Drupal/rest/Plugin/rest/resource/EntityResource.php
@@ -155,6 +155,11 @@ public function patch($id, EntityInterface $entity) {
+      // Requests cannot overwrite id or uuid, so skip them.
+      if (in_array($name, array('id', 'uuid'))) {
+        continue;
+      }

why is the UUID protected from writing? I can see that most use cases will never do that, but why artificially restricting it?

Otherwise this looks good!

#4

If we can't rely on uuid not changing, we can't build any functionality based off of uuid being, er, universally unique. If you want an object to have a different uuid... make a new object. (If we allow it, someone somewhere is going to change it and then we'll never be able to rely on the uuid again.)

#5

Reroll due to changes made in the REST test and HAL serialization getting in.

The .patch file includes the latest patch from #1931976: Support deserialization for hal+json (needs more language handling tests).

AttachmentSizeStatusTest resultOperations
1935538-05-rest-test-update.patch45.72 KBIdleFAILED: [[SimpleTest]]: [MySQL] Unable to apply patch 1935538-05-rest-test-update.patch. Unable to apply patch. See the log in the details link for more information.View details
1935538-05-rest-test-update__for-review.txt21.35 KBIgnored: Check issue status.NoneNone

#6

The for-review patch is dead simple and seems fine. If anything, I'd ask if we should be centralizing our definition of default so that we don't have to restate it in 50 places.

The dependent issue is still CNW, though, so we can't RTBC this one.

#7

#5: 1935538-05-rest-test-update.patch queued for re-testing.

#8

Status:needs review» needs work

The last submitted patch, 1935538-05-rest-test-update.patch, failed testing.

#9

Status:needs work» needs review

Probably just need to upload the .txt file in #5 with a .patch extension.

#10

Status:needs review» needs work

The last submitted patch, 1935538-05-rest-test-update.patch, failed testing.

#11

xpost.

#12

Changes in the REST tests since I posted this, have to reroll.

#13

Status:needs work» needs review

Here's a partial reroll, it still fails one of the tests. I won't have a chance to come back to it until this evening.

AttachmentSizeStatusTest resultOperations
1935538-13-rest-update.patch23.34 KBIdleFAILED: [[SimpleTest]]: [MySQL] 53,688 pass(es), 3 fail(s), and 0 exception(s).View details

#14

Status:needs review» needs work

The last submitted patch, 1935538-13-rest-update.patch, failed testing.

#15

I think I might need Klaus to take a look at these fails. I don't see a clear reason why in these three instances, switching to HAL would give a 500 instead of a 403, but it might be more obvious to him.

#16

The last patch reverted one of eff's fixes from the deserialization patch, so this just reintroduces that change. It doesn't fix the test fails, eff said he would take a look.

AttachmentSizeStatusTest resultOperations
1935538-16-rest-update.patch22.78 KBIdleFAILED: [[SimpleTest]]: [MySQL] 53,914 pass(es), 3 fail(s), and 0 exception(s).View details

#17

Status:needs work» needs review

Just a silly typo fix.

AttachmentSizeStatusTest resultOperations
1935538-17-rest-update.patch22.78 KBIdlePASSED: [[SimpleTest]]: [MySQL] 53,873 pass(es).View details
interdiff.txt2.32 KBIgnored: Check issue status.NoneNone

#18

Status:needs review» needs work

This just removes hunks unrelated to this issue. I moved them into #1931976-28: Support deserialization for hal+json (needs more language handling tests). I'll follow up with one more reroll for #6.

AttachmentSizeStatusTest resultOperations
1935538-18-rest-update.patch20.54 KBIdlePASSED: [[SimpleTest]]: [MySQL] 53,909 pass(es).View details

#19

Status:needs work» needs review

If anything, I'd ask if we should be centralizing our definition of default so that we don't have to restate it in 50 places.

Agreed. Done here. This changes nearly every line so no point in an interdiff.

AttachmentSizeStatusTest resultOperations
1935538-19-rest-update.patch23.33 KBIdlePASSED: [[SimpleTest]]: [MySQL] 53,933 pass(es).View details

#20

Status:needs review» reviewed & tested by the community

Thanks for fixing tests

#21

Status:reviewed & tested by the community» fixed

Oh, JSON-LD. We blow a trumpet for thee. Do we need another patch to remove the module as a whole?

In the meantime, this looks like it cleans up an awful lot of hard-coding as well as switching to a more recognized(?) format, so woohoo.

Committed and pushed to 8.x. Thanks!

#22

Title:Switch REST to default to HAL» Change notice: Switch REST to default to HAL
Priority:normal» critical
Status:fixed» active
Issue tags:+Needs change notification

Actually. I imagine this will require a change to a change notice somewhere, else a new one to be made if it doesn't already exist.

#23

Shouldn't the change notice be for #1935548: Remove JSON-LD module?

#24

Title:Change notice: Switch REST to default to HAL» Switch REST to default to HAL
Priority:critical» normal
Status:active» fixed
Issue tags:-Needs change notification

Moved the change notice requirement to #1816354-43: Add a REST module, starting with DELETE.

#25

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.