Предишна история [щракнете върху мен]
Основни компоненти на GraphQL —
1. Схема
2. Запитване
Схема —
schema дефинира структурата, типовете и връзките на наличните данни във вашия GraphQL API. Той действа като договор между сървъра и клиентите, определящ какви операции могат да се извършват и какви данни могат да бъдат достъпни.
Схемата на GraphQL се състои от два основни компонента: типове и полета.
Заявки —
Заявките позволяват на клиентите да извличат данни от API. Те са операции само за четене и не променят никакви данни. Например, клиент може да изпрати заявка за извличане на подробности за потребителя.
type Query { book(id: ID!): Book allBooks: [Book!]! } type Book { id: ID! title: String! publicationYear: Int! author: Author } type Author { id: ID firstName: String lastName: String }
пример —
В този пример имаме два основни типа: „Книга“ и „Заявка“.
Типът„Книга“ представлява обект книга със следните полета:
id
(от тип ID): Идентификатор за книгата.title
(от тип String): Заглавието на книгата.author
(от типAuthor
): връзката между книга и нейния автор. Той препраща към типаAuthor
.publicationYear
(от тип Int): Годината на публикуване на книгата.
Author
: Представлява авторски обект със следните полета:
id
(от типID
): Идентификатор за автора.firstName
(от типString
): Първото име на автора.lastName
(от типString
): Фамилното име на автора.
Типът „Заявка“ представлява наличните заявки в нашия API. Той включва следните полета:
book
(от тип Книга): Заявка, която приема аргументid
и връща една книга въз основа на предоставения идентификатор.allBooks
(от тип [Книга!]!): Заявка, която връща списък с всички книги.
изпращане на заявки —
клиентите могат да изпращат заявки за извличане на конкретни книги по ID или за извличане на всички книги, налични в API.
Например клиент може да изпрати следното GraphQL заявка:
Заявка-1:
query { book(id: "123") { title publicationYear } }
пита за заглавието и годината на публикуване на книга с ID “123”.
и след това сървърът ще отговори със съответния обект на книга:
{ "data": { "book": { "title": "Sample Book", "publicationYear": 2020 } } }
Заявка-2:
query { book(id: "123") { title author { firstName } publicationYear } }
заявката пита за полетата title
, author
(включително firstName
и lastName
) и publicationYear
на книгата с ID "123"
.
отговорът на сървъра ще бъде
{ "data": { "book": { "title": "Sample Book", "author": { "firstName": "John", }, "publicationYear": 2021 } } }
Запитване-3
query { book(id: "123") { title publicationYear } allBooks { title author publicationYear } }
Отговорът на сървъра може да бъде структуриран по следния начин:
{ "data": { "book": { "title": "Sample Book", "author": { "firstName": "John", "lastName": "Doe" }, "publicationYear": 2021 }, "allBooks": [ { "title": "Book 1", "author": { "firstName": "Jane", "lastName": "Smith" }, "publicationYear": 2022 }, { "title": "Book 2", "author": { "firstName": "Mark", "lastName": "Johnson" }, "publicationYear": 2023 }, { "title": "Book 3", "author": { "firstName": "Sarah", "lastName": "Williams" }, "publicationYear": 2021 } ] } }