Supponiamo di avere entità di progetto e attività per un elenco di cose da fare. Se è necessario che le attività si trovino in un progetto, le rotte delle attività probabilmente avranno questo aspetto:
GET /projects/{projectId}/tasks returns all tasks for the specified project
POST /projects/{projectId}/tasks creates a new task in the specified project
Ma non è altrettanto chiaro (per me) cosa fare se un'attività può essere indipendente (non parte di un Progetto). Vedo un paio di opzioni:
Hai due percorsi separati: uno per la creazione di un'attività legata al progetto e l'altra per un'attività indipendente
POST /projects/{projectId}/tasks creates a new task in the specified project
POST /tasks creates a new free-standing task
Questo sembra ... ok. Ma non mi piace l'idea di dover selezionare condizionatamente una route API in base alle attività.
Avere un unico percorso e specificare un projectId opzionale nel payload o nei parametri di query
POST /tasks creates a new task
GET /tasks?projectId={projectId} gets all tasks within the specified project
GET /tasks/{taskId} gets the specified task, regardless of whether it's in a project
Questo sembra migliore. Mi piace l'uniformità di avere un unico endpoint che gestisca tutto questo. Con questo approccio, però, ci sono due modi per ottenere un'attività con Id:
GET /tasks/{taskId}
GET /tasks?id=taskId
Ho la sensazione che la prima opzione sia un po 'più standard, ma la seconda si allinea meglio con altri tipi di filtri che si potrebbero fare (per progetto, per nome, ecc.). È meglio supportare entrambi o forzare l'uno o l'altro?
Alcuni di questi approcci sono generalmente accettati? Ci sono altre opzioni che non ho considerato?