Примечание: Эта статья была написана и предположительно опубликована зимой 2018 года
Микросервисы в наши дни более чем распространены, и в Travelex мы используем их в различных областях бизнеса. Для многих сервисов мы используем Spring framework, чтобы упростить быстрый запуск сервиса. Поскольку все микросервисы взаимодействуют друг с другом, мы приняли стандарт JSON:API. Библиотека, основанная на стандарте JSON:API, является библиотекой CRANK.
Crank – это собственная библиотека rest, ориентированная на ресурсы, где ресурсы, их взаимосвязи и хранилища являются основными строительными блоками.
Объединив кривошипно-шатунный и пружинный каркас, мы быстро запустили и запустили сервисы. Spring Boot создает работоспособную службу, а CRANK помогает обрабатывать взаимодействие с API-интерфейсами REST. В этой и следующей статьях будет рассказано о том, как настроить службу с помощью CRANK. Мы рассмотрим более общее представление о том, что такое CRANK, а позже мы поговорим о некоторых проблемах, с которыми мы столкнулись, когда хотели сделать что-то более продвинутое с CRNK.
КРНК
Минимальное требование для использования этой библиотеки – JAVA 8. Мы рассмотрим только gradle и maven для этой настройки. Для maven вы добавляете в свой pom.xml следующие пакеты:
io.crnk crnk-setup-spring-boot2 ${crnk.version} io.crnk crnk-client ${crnk.version} io.crnk crnk-validation ${crnk.version} io.crnk crnk-security ${crnk.version} io.crnk crnk-jpa ${crnk.version} io.crnk crnk-monitor-brave4 ${crnk.version}
И для gradle вы строите.gradle выглядит следующим образом:
compile project(':crnk-setup:crnk-setup-spring-boot2') compile project(':crnk-jpa') compile project(':crnk-validation') compile project(':crnk-home') compile project(':crnk-ui') compile project(':crnk-operations') compile project(':crnk-security') compile project(':crnk-data:crnk-data-facet')
При любом из этого проект готов к использованию CRANK. А пользоваться КРИВОШИПОМ довольно просто. Как минимум, ему нужна только аннотация к классу модели и репозиторий, связанный с этим классом модели. Хранилище будет обрабатывать данные для указанной модели. Он может либо хранить его сам по себе в виде хэш-карты, либо хранить данные в структуре данных, например в базе данных.
Модель и данные
Модель – это представление данных, имеющихся в приложении. Данные должны храниться в хранилище, которое либо хранит данные в памяти, либо может быть подключено к базе данных.
// Copyright (c) 2018 Travelex Ltd package com.travelex.store.model; import io.crnk.jpa.annotations.JpaResource; import lombok.Data; import javax.persistence.Entity; @Data @JpaResource(type = "person") @Entity public class Person { private String name; private int age; }
В приведенном выше примере ресурс Jpa будет внешним подключением к этому ресурсу при выполнении запроса POST, PUT или GET. Объект аннотации свяжет нас напрямую с базой данных, которая является нашей базовой структурой для хранения данных. Нам не нужно создавать класс репозитория, если мы настраиваемся с использованием сущности.
Ломбок
Пакет Lombok – это то, что мы используем во всех наших сервисах, что значительно помогает нам сократить код. Способ работы ломбока заключается в создании кода для нашего класса таким образом, нам не нужно писать о геттерах и сеттерах и всех тех методах, которые должен иметь класс. Аннотация данных объединяет различные аннотации для создания геттеров, сеттеров, строк, конструкторов и т. Д. Поэтому нам нужно только определить атрибуты нашей модели.
Хранилище
Теперь нам нужно подключить наш ресурс к его данным, и мы сделаем это, создав хранилище. Для простоты наш репозиторий будет хранить наши данные в памяти в хэш-карте.
Ресурс, которым является модель, необходимо подключить к своим данным. Обычно это делается с помощью репозитория. Хранилище будет либо хранить данные в памяти в виде хэш-карты, либо может быть подключено к структуре данных, например базе данных. Обычный репозиторий может выглядеть так:
// Copyright (c) 2018 Travelex Ltd package com.travelex.store.model; import io.crnk.core.queryspec.QuerySpec; import io.crnk.core.repository.ResourceRepositoryBase; import io.crnk.core.resource.list.ResourceList; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Component public class PersonRepository extends ResourceRepositoryBase{ private Map list = new HashMap<>(); public PersonRepository() { super(Person.class); } @Override public void delete(int age) { list.remove(age); } @Override public S save(S person) { list.put(person.getAge(), person.getName()); } @Override public ResourceListfindAll(QuerySpec querySpec) { return querySpec.apply(list.values()); } ... }
Фильтрация и CRNK
Ресурс Jpa предоставляет нам функции CRNK для запроса данных. Параметры по умолчанию – фильтрация и сортировка ресурсов. С помощью фильтрации вы можете иметь: эквалайзер для равных значений, НАПРИМЕР для шаблонов, LT для меньшего, LE для меньшего и равного, GT для большего и GE для большего и равного. Типичный вызов фильтра
/person?filter[EQ][age]=25
будет просматривать базу данных для каждого объекта, где данные по возрасту равны 25.
Вы можете добавить свой собственный оператор фильтра, если вы правильно обрабатываете запрос в репозитории. Это означает, что операторы фильтрации работают как с запросом, поступающим на ваш сервер, так и с запросом запроса к базе данных. С этим мы разберемся позже.
Резюме
С помощью библиотеки CRNK вы можете создавать API-интерфейсы REST с минимальными усилиями. Это помогает создать REST API для службы, и единственное, о чем нам нужно беспокоиться, – это данные, которые нам нужны для обработки указанной службы. Если вы используете платформу Spring framework, как мы это делали с нашим тестовым сервисом здесь, как минимум, вам потребуется менее 5 классов: основной класс, который запускает приложение SpringBoot, класс модели, который представляет наши данные, и класс конфигурации, который подключается к базе данных.
CRANK хорош для создания простых служб API REST, которые могут хранить данные. Он прост в использовании с Spring Boot, и нам, разработчикам, не нужно сосредотачиваться на коде для подключения к нашему сервису. Но, как и в случае с тем, что CRANK легко подключается к Spring Boot и настраивает службу, если вам нужно настроить что-то, что не является стандартным в CRNK, потребуется обойти это.
Оригинал: “https://dev.to/nchrisz/creating-rest-with-crnk-3a6m”