Sashko Stubailo GraphQL対記事翻訳 REST
HTTP経由でデータを送信する2つの方法:違いは何ですか?
GraphQLは、APIを理解するための革新的な新しい方法として提示されることがよくあります。 サーバー上でハード定義されたエンドポイントを使用する代わりに、単一の要求で必要なデータを正確に取得できます。 はい、GraphQLは組織に実装されると柔軟性があり、フロントエンドとバックエンドの開発チームのコラボレーションがこれまでになくスムーズになります。 ただし、実際には、これらのテクノロジーは両方ともHTTPリクエストの送信と何らかの結果の受信を伴い、RESTモデルの多くの要素がGraphQLに組み込まれています。
では、技術レベルでの違いは何ですか? 2つのAPIパラダイムの類似点と相違点は何ですか? 記事の終わりまでに、GraphQLとRESTにそれほど違いはないことを示しますが、GraphQLには小さな違いがあり、開発者によるAPIの構築と使用のプロセスを大きく変えます。
それでは、ポイントにまっすぐに行きましょう。 APIプロパティをいくつか定義し、GraphQLおよびRESTでそれらを実装する方法について説明します。
資源
REST — . URL, GET
- URL. , JSON, API. :
GET /books/1
{
"title": " ",
"author": {
"firstName": "",
"lastName": ""
}
// ...
}
: REST API ( «author») .
REST , , , . REST API, «book endpoint».
GraphQL , GraphQL . , Book
Author
:
type Book {
id: ID
title: String
published: Date
price: String
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
books: [Book]
}
: , , . REST GraphQL : .
, Query
:
type Query {
book(id: ID!): Book
author(id: ID!): Author
}
, REST-, , GraphQL:
GET /graphql?query={ book(id: "1") { title, author { firstName } } }
{
"title": " ",
"author": {
"firstName": "",
}
}
, -! GraphQL, REST, , URL, JSON-.
, , GraphQL- URL , . , , author
, — , API.
, , , Books Authors, . .
:
- : , .
- : GET- URL- HTTP.
- : JSON.
- : REST (endpoint) — . GraphQL , .
- : REST . GraphQL , .
GraphQL / REST, . GraphQL, Launchpad , .
URL- GraphQL
API , . API, - , , , .
, API — , . , , API, GraphQL- REST API Swagger .
REST API API (endpoints):
GET /books/:id
GET /authors/:id
GET /books/:id/comments
POST /books/:id/comments
, «» API — . - , : « endpoint »?
GraphQL, , URL- , API. GraphQL-:
type Query {
book(id: ID!): Book
author(id: ID!): Author
}
type Mutation {
addComment(input: AddCommentInput): Comment
}
type Book { ... }
type Author { ... }
type Comment { ... }
input AddCommentInput { ... }
REST . : HTTP- URL- (GET, PUT, DELETE ..) GraphQL — Mutation Query. GraphQL- , , :
query { ... }
mutation { ... }
« GraphQL» (.), .
, Query
REST, . , , GraphQL «URL (endpoint URL)».
GraphQL API , REST: ; , . GraphQL , , , REST , , - URL- .
REST (endpoints), GraphQL .
- : REST API
Query
Mutation
, GraphQL API. . - : API .
- : GraphQL , , . REST .
- : GraphQL
Query
, , query. , . REST URL. - : REST , HTTP-
GET
- POST
. GraphQL .
- , , Query
« » «» GraphQL. , , Query
, , .
, , API? , - , . , , API, , . , , . REST, GraphQL API, , .
JavaScript, , , , REST, GraphQL API. , , .
«Hello World» express, API Node:
app.get('/hello', function (req, res) {
res.send('Hello World!')
})
, /hello
, 'Hello World!'
. HTTP- REST API:
- HTTP- (
GET
) URL - API- ,
-
- API- ,
GraphQL , :
const resolvers = {
Query: {
hello: () => {
return 'Hello world!';
},
},
};
, URL , , — hello
Query
. GraphQL , , (resolver).
, (query):
query {
hello
}
, , GraphQL-:
- HTTP- GraphQL-
- (query) , (resolver). ,
hello
, Query
. -
- GraphQL , (query)
:
{ "hello": "Hello, world!" }
: !
query {
hello
secondHello: hello
}
, ( ), hello
. , , , .
(«nested» resolvers):
{
Query: {
author: (root, { id }) => find(authors, { id: id }),
},
Author: {
posts: (author) => filter(posts, { authorId: author.id }),
},
}
:
query {
author(id: 1) {
firstName
posts {
title
}
}
}
, , - . , GraphQL, «GraphQL Explained».
, !

: REST , GraphQL -
REST, GraphQL API . REST API, GraphQL API . GraphQL : .
- : REST GraphQL .
- : REST, GraphQL .
- : REST - . GraphQL - .
- : REST . GraphQL , GraphQL, .
, GraphQL . REST.
?
, . , , . , . , , , , REST GraphQL , .
, GraphQL. , , API -, , . API , API , .
, GraphQL , REST. , HTTP- GraphQL API , REST API. , GraphQL , Apollo Client Relay.
REST GraphQL — .