Spring Data REST теперь включает ALPS метаданные

Приветствую Spring-сообщество!

С недавним выпуском Spring Data’s Evans M1 milestone, Spring Data REST теперь включает ALPS метаданные.

ALPS предоставляет возможность опроса RESTful сервиса, чтобы узнать, какие данные он предоставляет. Давайте рассмотрим краткий пример. Если вы клонируете этот репозиторий и выполните mvn spring-boot:run, вы сможете получить эти значения довольно легко.

Возможно использовать как curl в командной строке, так и ваш любимый REST-клиент.
$ curl localhost:8080
{
  "_links" : {
    "todos" : {
      "href" : "http://localhost:8080/todos"
    },
    "profile" : {
      "href" : "http://localhost:8080/alps"
    }
  }
}

Если вы перейдете по адресу с /todos, то получите пустой JSON документ. Это потому что мы пока ниего не создали!

Чтобы создать TODO, необходимо поместить JSON документ в /todos. Но как мы это сделаем? Мы можем либо подглядеть объект домена, либо… мы можем подсмотреть далее и проверить новоиспеченный /alps адрес:

$ curl localhost:8080/alps
{
  "version" : "1.0",
  "descriptors" : [ {
    "href" : "http://localhost:8080/alps/todos",
    "name" : "todos"
  } ]
}

Хм… Нельзя сказать, что нам это много дало, за исключением того, что есть ещё адрес, содержащий TODO ALPS метаданные. Давайте перейдем по нему:

$ curl localhost:8080/alps/todos
{
  "version" : "1.0",
  "descriptors" : [ {
    "id" : "todo-representation",
    "descriptors" : [ {
      "name" : "description",
      "doc" : {
        "value" : "Details about the TODO item",
        "format" : "TEXT"
      },
      "type" : "SEMANTIC"
    }, {
      "name" : "title",
      "doc" : {
        "value" : "Title for the TODO item",
        "format" : "TEXT"
      },
      "type" : "SEMANTIC"
    }, {
      "name" : "id",
      "type" : "SEMANTIC"
    }, {
      "name" : "completed",
      "doc" : {
        "value" : "Is it completed?",
        "format" : "TEXT"
      },
      "type" : "SEMANTIC"
    } ]
  }, {
  ...

Для краткости, я укоротил ALPS метаданные. Здесь мы можем увидеть несколько записей: description, title, id и completed. Они имеют соответствующие описания (предоставленные из нашего кода через @Description аннотации).

Более подробную информацию вы можете получить в ALPS спецификации.

Это дает нам подсказку, какие данные нам необходимо иметь, чтобы создать TODO запись. Если мы поместим следующий документ http://localhost:8080/todos:

{
    "title":"Create blog entry", 
    "description": "Write blog post about SDR's ALPS metadata support", 
    "completed": "false"
}

…мы должны получить в ответ Location заголовок нашего нового ресурса. При посещении, мы получим:

{
  "title" : "Create blog entry",
  "description" : "Write blog post about SDR's ALPS metadata support",
  "completed" : false,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos/1"
    }
  }
}

Этот небольшая часть метаданных позволила нам взаимодействовать с RESTful-сервисом без необходимости в получении доступа к документации.

Так для чего полезны ALPS метаданные? Мы использовали их для создания новой записи. Мы можем также:

  • Получать информацию через PATCH или PUT
  • Разрабатывать клиентскую часть
  • Генерировать некоторое количество документации
Автоматизация чего-либо всегда несет в себе элемент риска, если что-то измениться вдруг. Ответственность за это несет, как правило, поставщик услуг, а также от того, насколько хорошо они контролируют изменения через версионирование. Также, есть вероятность того, что сгенерированные артефакты(подобно документации), не будут соответствовать удаленному сервису.

Тем не менее, большая часть информации о сервисе, предоставляемая по требованию — это хорошая вещь, которая, как мы надеемся, вам понравится!

Если вам интересно узнать больше о Spring Data REST в действии, не забудьте подписаться на Data Meets Hypermedia на SpringOne конференции этого года. Spring Mobile/Android проект, который ведет Roy Clarkson, присоединится ко мне, когда мы будем использовать Spring Data REST для создания Spring-a-Gram, инструмента привязки фотографий с вашего мобильного устройства и публикации в социальных сетях.

Ваше здоровье!

comments powered by Disqus