REST APIがめちゃくちゃ!
0、目標
YTS API(映画情報を提供するAPI)をGraphQLとしてパッケージし、API要素に必要な情報のみを受信する.
API構造プレビュー:https://yts.mx/api/v2/list_movies.json?
github: https://github.com/MinGookK/movieql
意味がわからなければ、前のポスターを見て30秒で読めます.
なぜGraphQLを使うのですか?
入るまでは、GraphQLを深く処理しません.
1.構造
GraphQLを使用してAPIを作成するには、大きく4つのファイルに分けられます.
GraphQLを使用してAPIを作成するには、大きく4つのファイルに分けられます.
index.js
サーバドライバコードを作成します.
schema.graphql
GraphQLのデータ型を指定します.
(要求データのタイプ、要求変換のタイプ;結果のタイプを指定)
resolvers.js
schemaに基づいて実際のデータ移動を作成する
(schema=問題セット、解析器=答え)
db.js
データの作成や関数の管理などを行います.
1. index.js
ここではGraphqlserverドライバコードを記述します.
import { GraphQLServer } from 'graphql-yoga';
import resolvers from './graphql/resolvers';
//GraphQLServer 안의 {} 에 서버 환경설정을 넣어주면 서버 구동 끝이다. 너무 쉽다.
const server = new GraphQLServer({
//모든 type에 대한 정의임 작성해둔 graphql의 위치 입력
typeDefs: 'graphql/schema.graphql',
resolvers,
});
server.start(() => console.log('GraphQL Server Running'));
特にありません.これがサーバドライバの終了です.はははGraphQLServerに2、3つの要素schemaと解析器を入れればいいです.
これは何なのか教えてあげますから、読み続けましょう.
2. schema.graphql
ここではGraphQL APIが使用するデータ型を示す場所です.
type Movie {
#첫줄 설명: id라는 것은 Int 자료형을 가지고 "반드시 필요"(!)하다.
#반드시 필요하지 않은 값이라면 !를 빼주면 된다.
id: Int!
title: String!
rating: Float!
summary: String!
medium_cover_image: String!
}
type Query {
# person이라는 쿼리를 담아 보내면 String 형태로 반환해 줄 것이고 반드시 필요하다(!)라는 뜻
movies(limit: Int, rating: Float): [Movie]!
}
APIプレビューリンクをクリックすると、映画に関する情報がたくさん届きます.私たちはこの中にいます.
id, title, rating, summary, medium_cover_image
タイプMovieのみが必要なので、type Movieではこのパラメータのみがマークされます.
その後、Queryでmoviesを呼び出すと、結果に一致するMovieのArrayが返されます.
3.resolvers.js
schemaはqueryを含める方法、結果がどのようなタイプになるかを示します.
今は答え用紙に記入して、本当のデータがどのように得られるかを見るだけです.
// Query를 resolve(해결)하는 것
// graphql 에서 작성한 쿼리를 해결하는 코드를 resolvers에서 작성한다.
import { getMovies } from './db';
const resolvers = {
Query: {
movies: (_, { limit, rating }) => getMovies(limit, rating),
},
};
export default resolvers;
movies( _, { limit, rating } )
から_
はルートで、ここでは必要ありません.ユーザーからlimitとratingを取得します.
つまり、
getMovies
で限界個数を超えるスコアを獲得した映画だけが返却される.これで解決策も終わりです.
4. db.js
これで、タイプ定義と解析が完了しました.
ここではgetMoviesがどのように映画情報を受信したかだけを記入します.
import axios from 'axios';
export const getMovies = (limit, rating) => {
let API_URL = 'https://yts.mx/api/v2/list_movies.json?';
if (limit > 0) {
API_URL += `limit=${limit}`;
}
if (rating > 0) {
API_URL += `&minimum_rating=${rating}`;
}
return axios.get(API_URL).then((res) => res.data.data.movies);
};
API Document: https://yts.mx/api#list_movies ドキュメンタリーを読んだことがあるならlimitを入力すると数字で映画に載せることがわかります
minimum ratingを入力すると、入力点数以上の映画にしか評価されません.
もう終わりだ!テストしてみましょう.
2.テスト
GraphQLヨガを使用すると、このようにして生成されたAPIを非常に簡単にテストすることができます.yarn start
を実行し、アドレスウィンドウにlocalhost:4000
を入力します.
ここでは、作成したAPIをテストできます.右側でDOCSボタンを押してください.
驚くべきことに、私たちがモードで書いた内容はきれいに整理されています.
指示に従ってQueryを作成します.
テストが順調かどうかを見るために、titleとratingだけをマークするように呼んでみました.
案の定、4つの情報がlimit数字で、みんなの評価も8点を超えた.
例ではtitleとratingのみがマークされていますが、それ以外に必要な情報を追加または削除して呼び出すと、「ちょうどいい」要求の情報しか受信できません.
映画の表紙画像の情報をもう一度受信します.
やっぱり成功した!
このデータクリーンアップ作業はフロントで多く処理されています.
最初はGraphQLでAPI設計を行い、フロントでは表示と機能に集中するだけで、作業が楽になるかもしれません.
Reference
この問題について(REST APIがめちゃくちゃ!), 我々は、より多くの情報をここで見つけました
https://velog.io/@mgk8609/GraphQL-구조
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(REST APIがめちゃくちゃ!), 我々は、より多くの情報をここで見つけました https://velog.io/@mgk8609/GraphQL-구조テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol