RESTful дизайн - конечные точки подресурсов - PullRequest
1 голос
/ 12 марта 2019

Я разрабатываю REST API, который работает со счетами, и каждый счет имеет историю состояний.

Существует конечная точка для получения истории состояний для счета, который выглядит следующим образом

/invoices/{invoice_id}/states

REST полезно включить это в качестве эквивалента? Это рекомендуется / требуется?

/states/{invoice_id}

1 Ответ

1 голос
/ 12 марта 2019
/invoices/{invoice_id}/states
/states/{invoice_id}

Что касается REST, два разных идентификатора означают два разных ресурса.Это не означает, что сервер не может иметь два ресурса с синхронизированными представлениями, но это означает, что общие компоненты не будут знать, что эти два ресурса «действительно» одно и то же.

Это может иметь значениекогда вы имеете дело с аннулированием кэша .

Например:

# Assume: empty cache

onRead(/invoices/{invoice_id}/states)
    # Not available locally therefore
    GET /invoices/{invoice_id}/states
    200 OK
    # Representation from server is loaded into the cache
    # Representation from server is returned to caller

onRead(/states/{invoice_id})
    # Not available locally therefore
    GET /states/{invoice_id}
    200 OK
    # Representation from server is loaded into the cache
    # Representation from server is returned to caller

onRead(/invoices/{invoice_id}/states)
    # valid representation available locally therefore
    # Representation from cache is returned to caller

onRead(/states/{invoice_id})
    # valid representation available locally therefore
    # Representation from cache is returned to caller

onChange(/invoices/{invoice_id}/states)
    # PUT, PATCH, DELETE would all be similar
    POST /states/{invoice_id}
    200 OK
    # successful request, so cached copy is invalidated

onRead(/invoices/{invoice_id}/states)
    # Not available locally therefore
    GET /invoices/{invoice_id}/states
    200 OK
    # Representation from server is loaded into the cache
    # Representation from server is returned to caller

onRead(/states/{invoice_id})
    # valid representation available locally therefore
    # Representation from cache is returned to caller

В итоге у /states/{invoice_id} будет копия перед изменением,но /invoices/{invoice_id}/states будет иметь копию после изменения.

Если это полезно, отлично!

Но я предполагаю, что чаще всего это создает проблемы, которые неоправданно трудно отследить.Я бы предпочел руководящие принципы разработки, когда все копии одного и того же документа доступны с использованием одного и того же идентификатора, за исключением случаев, когда существует очевидная бизнес-ценность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...