HTTP cache invalidation: sub-resource collections need an extension point
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 68/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- laravel, php, symfony
- Ambito
- backend, backend-api-design
Direzione di ricerca
Inizia leggendo le implementazioni esistenti di PurgeHttpCacheListener e Serializer\TagCollectorInterface, quindi esamina l'area src/HttpCache/ e il wiring di Symfony e Laravel. Il lavoro è completato quando la nuova interfaccia del provider è disponibile, i provider opzionali vengono aggregati e consultati da entrambi i listener, i tag generati vengono aggiunti e questo punto di estensione è documentato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
PurgeHttpCacheListener (Symfony Doctrine and Laravel Eloquent) cannot invalidate sub-resource collection operations such as /parents/{parentId}/children. Resolving the IRI requires parent uriVariables that the listener does not have when it sees the modified entity, so those collection tags are silently skipped.
Pragmatic solution
Expose a public extension point — symmetric to Serializer\TagCollectorInterface on the response side — that the listener consults to collect extra tags for a given entity:
namespace ApiPlatform\HttpCache;
interface PurgeTagProviderInterface
{
/**
* @return iterable<string> additional cache tags to invalidate for $entity
*/
public function getTagsForResource(object $entity): iterable;
}
Wiring:
- Tagged service (Symfony) / iterator binding (Laravel), aggregated and injected into
PurgeHttpCacheListener. - The listener appends whatever the providers yield to its existing tag set.
- Default ships with no provider — users opt in.
This keeps identifier-finding out of the framework (the user knows how their child invalidates their parents) and lets each project plug exactly the strategy that fits its routing (parent uri_variables, surrogate-key prefixes, class-based tags, etc.).
Scope
- Add the interface in
src/HttpCache/. - Inject
iterable<PurgeTagProviderInterface>(optional, default empty) into both Symfony and LaravelPurgeHttpCacheListener. - Document the seam alongside
TagCollectorInterface.
- Lingua principale
- PHP
- Stelle
- 2.6k
- Fork
- 982
- Merge medio
- 1g 16h
- PR unite (30g)
- 59
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di api-platform/core
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
api-platform/core#8564 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
api-platform/core#8495 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
api-platform/core#8471 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
api-platform/core#8475 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
api-platform/core#8447 ·
Tutte le issue di api-platform/core
Issue simili
-
Solved site promotion gate fails on runner PHP patch drift (expects 8.2.33, runner installs 8.2.34) Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Automattic/blocks-engine#2161 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Automattic/static-site-importer#1824 ·
-
[Chore] Keep one viget-block-generator skill and replicate it, instead of four tracked copies Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Cannot reset column width Aperta0. Needs triage bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
0. Needs triage 35-feedback bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100