RESTとGraphQLの比較


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,      .            .



   :



  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    .



-   , , 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:


  1.   HTTP- (  GET)   URL
  2. API-    ,  
  3.  
  4. API- ,    

GraphQL ,       :


const resolvers = {
  Query: {
    hello: () => {
      return 'Hello world!';
    },
  },
};

, URL  , ,    — hello Query.  GraphQL , , (resolver).


, (query):


query {
  hello
}

, , GraphQL-:


  1. HTTP-     GraphQL-
  2. (query) ,   (resolver).   , hello,   Query.
  3.  
  4. 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 :   .



 ,    GraphQL     . REST.


?


,       . , , . ,   .  ,  ,   ,  , REST  GraphQL  , .


 ,     GraphQL.  , , API -,   ,   . API     ,   API ,  .


  , GraphQL    , REST. ,       HTTP- GraphQL API   , REST API.  ,   GraphQL  , Apollo Client  Relay.


    REST  GraphQL —  .



Source: https://habr.com/ru/post/J335158/


All Articles