Este guia evita o erro mais comum na migracao do primeiro consumidor:
misturar os papeis de resource, surface,
action e capability.
Use resource-oriented quando a operacao e parte do
contrato canonico do recurso.
Entram aqui:
GET /{id}GET /allPOST /PUT /{id}DELETE /{id}POST /filterPATCH /{id}/profile quando isso ainda for manutencao do
recursoRegra:
resource define o contrato realresource e a fonte da verdade de payload e schemaUse @ResourceIntent quando um PATCH
continua sendo resource-oriented, mas com semantica propria.
Exemplo:
PATCH /employees/{id}/profileRegra:
resourceintent nomeia a manutencao parcialUse @UiSurface quando a UI precisa descobrir
semanticamente uma experiencia sobre uma operacao real.
Entram aqui:
Regra:
surface nao define payloadsurface aponta para operacao real + schema
canonicoITEM em /schemas/surfaces e discovery-only
sem resourceId; a availability real vem de
GET /{resource}/{id}/surfacesUse @WorkflowAction quando a operacao e um comando de
negocio explicito.
Entram aqui:
approverejectresubmitbulk-approveRegra:
action nao e CRUDaction nao e patch de manutencao do recursoITEM em /schemas/actions e discovery-only
sem resourceId; a availability real vem de
GET /{resource}/{id}/actionsUse GET /{resource}/capabilities ou
GET /{resource}/{id}/capabilities quando o cliente precisa
de um snapshot agregado do que pode ser feito agora.
O snapshot agrega:
surfacesactionsRegra:
capability nao substitui catalogos dedicadoscapability nao define schema inlinecapability agrega ausencia de surfaces e
actions como listas vazias, mas os catalogos dedicados
mantem sua propria semantica (surfaces automaticas;
actions 404 sem workflow)Pergunta 1: a operacao altera ou le o recurso como parte do contrato principal?
resourcePergunta 2: a operacao ainda e manutencao do recurso, mas parcial ou com UX propria?
resource + opcionalmente
@ResourceIntent + @UiSurfacePergunta 3: a operacao e um comando de negocio explicito?
@WorkflowActionPergunta 4: a UI so precisa saber o que existe ou o que esta disponivel agora?
surfaces ou
actionscapabilitiesPATCH /employees/{id}/profile ->
resource + @ResourceIntent + opcionalmente
@UiSurfacePOST /employees/{id}/actions/approve ->
@WorkflowActionGET /employees/{id}/surfaces -> discovery semantico
contextualGET /employees/{id}/actions -> discovery de workflow
contextualGET /employees/{id}/capabilities -> snapshot
agregado contextual