This is happening as part of #2757967: API-first initiative. It's the successor to #2794263: REST: top priorities for Drupal 8.3.x, which was the successor to #2721489: REST: top priorities for Drupal 8.2.x.

Theme: Make Drupal 8’s REST best-in-class.

Any use case (fully decoupled, progressively decoupled, content sync)

  1. Full config entity support: #2300677: Create/Update/Delete (POST/PATCH/DELETE) ConfigEntity via REST
  2. Serialization WTF: strings instead of bools/ints: #2751325: All serialized values are strings, should be integers/booleans when appropriate
  3. Serialization gap: file+image style URLs: #2825487: [PP-1] Fix normalization of File entities & File fields: file entities should expose the file URL as a computed base field + #2825812: [PP-1] ImageItem normalizer should expose all public image style URLs
  4. Serialization gap: timezone handling unclear: #2768651: Let TimestampItem (de)normalize to/from RFC3339 timestamps, not UNIX timestamps, for better DX + #2824717: Add a format constraint to DateTimeItem to provide REST error message
  5. Serialization gap: processed text: #2626924: [PP-1] Expose TextItems' "processed" property when normalizing
  6. Serializatoin gap: entity reference fields normalize UUID, but ignore those upon denormalization: #2827164: Entity reference field normalization has target_type and target_uuid, but not used in denormalization
  7. Serialization gap: taxonomy term's parent term: #2543726: Make $term->parent behave like any other entity reference field
  8. Serialization gap: menu link content entities' content references: #2577923: Menu link content entities that point to nodes are not deployable
  9. Serialization gap: path fields omitted from normalized entities: #2846554: Make the PathItem field type actually computed and auto-load stored aliases
  10. EntityResource: translations support: #2135829: EntityResource: translations support
  11. File uploads: #1927648: Allow creation of file entities from binary data
  12. REST export views break the HTML view if they're on the same path: #2449143: REST views specify HTML as a possible request format, so if there is a "regular" HTML view on the same path, it will serve JSON

DX

  1. XML support is broken: #2800873: Add XML GET REST test coverage, work around XML encoder quirks
  2. GET/PATCH/DELETE to /node, but POST to /entity/node: #2293697: EntityResource POST routes all use the confusing default: use entity types' https://www.drupal.org/link-relations/create link template if available
  3. #2820364: Entity + Field validation constraints are processed in the incorrect order
  4. Vocabulary WTF: #2808217: To be able to view Vocabulary config entities via REST, one should not have to grant the 'administer taxonomy' permission
  5. Term WTF: #2824408: [PP-1] To be able to create/update/delete Term entities via REST, one should not have to grant the 'administer taxonomy' permission
  6. 403 instead of 406: #2805279: Routing system + authentication system + format-specific routes (e.g. those in rest.module) = frustrating, unhelpful 403 responses instead of 406 responses
  7. Authentication WTF wrt anon: #2817737: A REST resource's "auth" configuration MUST be non-empty, which prevents configuring it for anon access only
  8. Authentication WTF wrt cookies: #2817745: Add test coverage to prove that REST resource's "auth" configuration is also not allowing global authentication providers like "cookie" when not listed
  9. #2825347: 'Accept' header still is used for determining response format of error responses, ?_format= has no effect AND serialization module's exception subscriber does not support status code 500 error responses
  10. #2821077: PATCHing entities validates the entire entity, also unmodified fields, so unmodified fields can throw validation errors
  11. #2844046: REST Resource config entities do not respect the status (enabled/disabled)
  12. #2826407: PATCH + POST allowed format validation happens in RequestHandler::handle(), rather than in the routing system
  13. #2853300: Standardize fatal error/exception handling: backtrace for all formats, not just HTML
  14. #2856110: [PP-1] Expose entity validation errors in a machine readable REST API:

Fully decoupled

  1. #2847708: RPC endpoint to reset user password
  2. #2850034: CORS allow-origin '*' not possible because of cached headers

Velocity+maintainability+reliability+predictability

  1. Cacheability: #2827797: ResourceResponse(Subscriber) + Dynamic Page Cache: making authenticated ResourceResponses significantly faster + #2765959: Make 4xx REST responses cacheable by (Dynamic) Page Cache + comprehensive cacheability test coverage
  2. #2824572: [PP-11] Write EntityResourceTestBase subclasses for every other entity type.
  3. #2737751: [PP-2] Refactor REST routing to address its brittleness
    1. #2853460: [PP-1] Simplify RequestHandler
    2. #2775479: Try to remove the "map HEAD to GET" logic in \Drupal\rest\RequestHandler::handle()
  4. #2854830: Move rest/serialization module's "link manager" services to HAL module
  5. PATCH + POST test coverage/reliability: #2882717: EntityResourceTestBase: assert that PATCHed and POSTed entities contain the intended values
  6. #2824851: EntityResource::patch() makes an incorrect assumption about entity keys, hence results in incorrect behavior

JSON API blockers

  1. #2854543: NegotiationMiddleware calls $request->setRequestFormat('html') when there is no _format request parameter, but shouldn't
  2. #2854560: \Drupal\Core\Routing\RequestFormatRouteFilter::filter() is too HTML-centric
  3. #2825487: [PP-1] Fix normalization of File entities & File fields: file entities should expose the file URL as a computed base field
  4. #2353611: Make it possible to link to an entity by UUID

Comments

Wim Leers created an issue. See original summary.

Wim Leers’s picture

Project: Drupal core » Drupal core ideas
Version: 8.4.x-dev »
Component: rest.module » Active Initiative
Issue summary: View changes
Wim Leers’s picture

Issue summary: View changes

Forgot to omit one that was fixed in 8.3 :)

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Issue summary: View changes

Adding #2737751: [PP-2] Refactor REST routing to address its brittleness.

Renamed the Test coverage: velocity+maintainability+reliability+predictability section to Velocity+maintainability+reliability+predictability — sometimes mere untangling of broken architecture and fixing it can also be important for those 4 things. #2737751 is an example of that. It's been haunting us for years. Time to fix it.

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Gábor Hojtsy’s picture

#2843147: Add experimental JSON API module is not listed as a priority. Any reasons for that?

Wim Leers’s picture

Wim Leers’s picture

#13: because JSON API != REST. They're orthogonal. They do both rely on the serialization module though. So many of the fixes that we are landing for the REST module also help the JSON API module.

You should consider this issue on the same level as #2836165: New experimental module: JSON API: both this and that issue are plan issues in the "Drupal core ideas" queue. And #2843147: Add experimental JSON API module is the child issue of #2836165 against Drupal core, so that that we can have a patch that is tested against core.

Wim Leers’s picture

Wim Leers’s picture

Issue summary: View changes

Per #2100637-156: REST views: add special handling for collections and later comments, we decided to not pursue this in core. We collectively agreed that it makes more sense to defer this to JSON API for now. Since #2099281: [PP-1] REST views: pagination link relations depends on #2100637, that issue is also impacted.

Removed those two.

Wim Leers’s picture

Issue summary: View changes

#2648268 was deprioritized at #2648268-35: REST views: row-level caching doesn't exist, unlike for other types of views two weeks ago. Also removing it from this list.

Wim Leers’s picture

Issue summary: View changes

#2751325: All serialized values are strings, should be integers/booleans when appropriate landed! Inexplicably, this was not listed here. This has taken months to get fixed. It definitely has earned a place here.

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

dawehner’s picture

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

skyredwang’s picture

Wim Leers’s picture

That's in JSON API, not in Drupal core's REST. We already have issues for the normalization of TimestampItem and DateItem in Drupal core.

Wim Leers’s picture

Issue summary: View changes

#2824717: Add a format constraint to DateTimeItem to provide REST error message landed, which solves one half of the serialization gap problem.

Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Issue summary: View changes
Wim Leers’s picture

Issue summary: View changes
Wim Leers’s picture

Wim Leers’s picture

Wim Leers’s picture

Issue summary: View changes

#2824851: EntityResource::patch() makes an incorrect assumption about entity keys, hence results in incorrect behavior just landed and I notice now that it wasn't listed here. Added to the Velocity+maintainability+reliability+predictability
section.