Как поместить создание ресурсов и другие методы в одну группу?

Предположим, я создаю ресурс с помощью POST /resource, который дает id в теле ответа, а затем я использую этот id для получения своего ресурса с помощью GET /resource/{id}.

Как поместить эти два запроса в одну группу API Blueprint?

По-видимому, у группы есть только одна конечная точка, из-за чего следующее выглядит так, как будто вы создаете ресурс с POST /resource/{id}, что не соответствует действительности, потому что на данный момент у вас даже нет идентификатора.

## Resource [/resource/{id}]

### Creating the resource [POST]

+ Response 201
    + Body

            {
                "id": "uuid"    
            }

### Retrieving the resource [GET]

+ Parameters
    + name (string) ... The name of your collection.

+ Response 200
  + Body

          {
              "id": "uuid"  
          }

Я просмотрел примеры, но не смог найти пример создания и получение определенного ресурса. Я делаю это неправильно?


person João Pinto Jerónimo    schedule 27.08.2014    source источник


Ответы (1)


Технически /resource и /resource/123456 не являются одним и тем же идентификатором ресурса. Для получения более подробной информации см. Ресурс HTTP намного проще, чем вы думаете.

Лично я предпочитаю думать об этом как о «ресурсе» и «наборе ресурсов». Где операция создания обычно означает «создать и вставить в коллекцию». Коллекция имеет один URL-адрес (например, /mighty/frogs/in/the/wood/ или /resources), а ресурс из коллекции имеет другой URL-адрес (например, /123124 или /resources/1234). Обратите внимание, что абсолютные значения URL-адресов не имеют значения, если они уникальны — при этом сказал, что, как правило, разумные URL-адреса — это хорошая идея.

Вернуться к чертежу:

# Collection of Resource [/resouces]
## Create [POST]

...

### List all Resources [GET]
...

# One Resource [/resource/{id}]

## Retrieve the Resource [GET]    
...

Надеюсь это поможет.

person Zdenek    schedule 27.08.2014
comment
Твои чертежи создают набор ресурсов, чего я пытался избежать. Тем не менее, если вы думаете только о ресурсе и его продолжительности жизни, у вас есть создание, обновление, поиск и удаление. POST PUT GET DELETE, и кажется, что они должны принадлежать к одной и той же группе. Хуже всего то, что в моем API на самом деле есть ресурс с именем collection, поэтому мне пришлось бы называть эту группу Collection of Collections... Я ненавижу называть вещи... - person João Pinto Jerónimo; 27.08.2014
comment
Однако вы ДЕЙСТВИТЕЛЬНО создаете сообщение ресурса, отправляющее сообщение другому ресурсу (POST/resources против GET/resources/12312). По сути, REST — это манипулирование ресурсами через их представления на основе доступных возможностей. Это не ООП :) Но опять же, это моя точка зрения и ваш пробег может отличаться - person Zdenek; 27.08.2014
comment
Также см. это обсуждение для запланированных обновлений синтаксиса, связанных с этим — github .com/apiaryio/api-blueprint/issues/ - person Zdenek; 27.08.2014
comment
Ага! Это то, что нужно :) Спасибо! - person João Pinto Jerónimo; 28.08.2014