фон
С открытым исходным кодом React Facebook последовательно открыл источники много связанных проектов. Эти проекты использовались в них много лет. Что привлекло мое внимание, так это то, что на этот раз график. В настоящее время существует только версия Nodejs официального сайта. Поскольку технологические стеки многих компаний являются Java, существует внедрение Java версии GraphQL, которую можно найти на GitHub. Без лишних слов просто посмотрите на код. Для конкретного введения перейдите в официальное кафе на веб -сайте, в противном случае оно будет не по теме.
Graphqlschema
Схема эквивалентна базе данных, она состоит из многих graphqlfielddefinitions, поле эквивалентно таблице/представлению базы данных, а каждая таблица/представление состоит из имени, параметров запроса, структуры данных и данных.
1) Сначала определите поле структуры данных (GraphQloutputType), а затем определите метод инициализации
Private GraphQloutputType userType; private void initOutputType () { / *** Структура объекта члена* / userType = newObject () .name ("user") .field (newfieldDefinition (). name ("id"). .field (newfielddefinition (). name ("age"). type (graphqlint) .build ()) .field (newfielddefinition (). name ("name"). Type (graphqlstring) .build ()) .field (newfielddefinition (). name ("pic"). Тип (graphQlString).2) Определите еще две таблицы/представления, которые включают имена, параметры запроса, структуры данных и поиск данных
/ *** Query Insover Information* @return*/ private graphqlfielddefinition createUserfield () {return graphqlfielddefinition.newfielddefinition () .name ("user") .argument (newargument (). Query Paramets int = ) .строить(); } / *** Запрос информации с несколькими членами* @return* / private graphqlfielddefinition createusersfield () {return graphqlfielddefinition.newfielddefinition () .name ("users") .argument (newargument (). Name ("page"). Тип (graphqlint). .argument (newargument (). name ("size"). Type (graphqlint) .build ()) .argument (newargument (). name ("name"). Type (graphqlString) .build ()) .type (new GraphQllist (usertype)) .datafetcher (Environment -> { / get Query Pareceter = int Query Querys = int query Queryers = int querys =. environment.getArgument("page"); int size = environment.getArgument("size"); String name = environment.getArgument("name"); // Execute the query, here you can use some test data to illustrate the problem List<User> list = new ArrayList<>(size); for (int i = 0; i < size; i++) { User user = new User(); user.setId(i); user.setAge(i + 15); }3) Затем определите схему и инициализируйте ее, содержит имя и одну или несколько таблиц/представлений (поля)
Частная схема Graphqlschema; public graphschema () {initOutputType (); schema = graphqlschema.newschema (). Query (newobject () .name ("graphquery") .field (createUsersfield ()) .field (createUserfield ()) .build ()). Build (); }4) После завершения вышеуказанных шагов вам необходимо определить модель, без ограничения на имя класса, но структура должна соответствовать структуре данных, определенной выше, и она должна быть публичной.
Пользователь открытого класса {private Int Id; частный int возраст; частный секс INT; Приватное название строки; Private String Pic; // getter, setter ...}5) Затем напишите основной метод, чтобы проверить его
public static void main (string [] args) {graphqlschema schema = new graphschema (). getSchema (); String Query1 = "{users (page: 2, size: 5, name:/" john/") {id, sele, имя, pic}}"; String Query2 = "{user (id: 6) {id, sex, name, pic}}"; String Query3 = "{user (id: 6) {id, sex, name, pic}, users (page: 2, size: 5, name:/" john/") {id, sele, имя, pic}}"; Map <string, object> result1 = (map <string, object>) new graphql (schema) .execute (Query1) .getData (); Map <string, object> result2 = (map <string, object>) new graphql (schema) .execute (Query2) .getData (); Map <string, object> result3 = (map <string, object>) new graphql (schema) .execute (Query3) .getData (); // запросить систему списка пользователей.out.println (result1); // Запросить одну пользовательскую систему.out.println (result2); // Проверка System.out.println (result3);}Выход:
{users = [{id = 0, sex = 0, name = John_2_0, pic = pic_0.jpg}, {id = 1, sex = 1, name = John_2_1, pic = pic_1.jpg}, {id = 2, sex = 0, name = John_2_2, pic = pic_2.jpg}, {id = 3, name_2_2_2_2_2_2_2_2_2, hohl_2_2, pic pic = pic_3.jpg}, {id = 4, sex = 0, name = John_2_4, pic = pic_4.jpg}]} {user = {id = 6, sex = 0, name = name_6, pic = pic_6.jpg}} {user = {id = 6, sex = name = name_6, pic = pic_6. sex = 0, name = John_2_0, pic = pic_0.jpg}, {id = 1, sex = 1, name = John_2_1, pic = pic_1.jpg}, {id = 2, sex = 0, имя = John_2_2, pic = pic_2.jpg}, {id = 3, sex = 1, namu sex = 0, name = John_2_4, pic = pic_4.jpg}]}6) Наконец, поместите код в основной метод на веб -уровне, и необходимо только определить параметр запроса, легко создать сервис запросов. Оригинальный интерфейс запроса по -прежнему называется в DataFetcher.
7) Внедрить зависимости Maven
<dependency> <groupid> com.graphql-java </GroupId> <artifactid> graphql-java </artifactid> <sersive> 2.0.0 </version> </depervice>
Что касается определения запроса GraphQL, см. Это может быть полезно для вас
json
{id = 6, sex = 0, name = "name_6", pic = "pic_6.jpg"}запрос
{id, секс, имя, рис}Последняя часть на самом деле является строкой JSON. Результат удаления = и значение все еще читаемо.
Заключение
GraphQL привносит новый способ мышления, который может упростить разработку веб -API. Клиент указывает, какие данные необходимы и какие данные возвращаются сервером, снижает ненужную передачу трафика, дружелюбно к мобильным терминалам, а также предоставляет различные запросы агрегации данных. Несколько запросов используют только один запрос, который не только соответствует минимальной детализации API, но также отвечает потребностям фронт-энда, снижает запросы и повышает производительность.
Я чувствую, что буду развиваться в этом направлении в будущем, движимой общей тенденцией.