>웹 프론트엔드 >JS 튜토리얼 >React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법

React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법

王林
王林원래의
2023-09-27 10:40:441423검색

React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법

React 및 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법

웹 애플리케이션의 복잡성이 계속 증가함에 따라 확장 가능한 API 인터페이스 구축이 점점 더 중요해지고 있습니다. React와 GraphQL은 효율적이고 유연하며 확장 가능한 API를 구축하는 데 도움이 되는 두 가지 널리 사용되는 기술입니다. 이 글에서는 React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법을 살펴보고 구체적인 코드 예제를 제공합니다.

React는 사용자 인터페이스 구축을 위한 JavaScript 라이브러리입니다. 이는 인터페이스를 재사용 가능한 구성 요소로 분해하는 방법을 제공하므로 개발자는 복잡한 사용자 인터페이스를 쉽게 구축할 수 있습니다. GraphQL은 클라이언트가 필요한 데이터를 정확하게 얻을 수 있도록 설계된 쿼리 언어 및 런타임 환경입니다. 강력한 유형 시스템과 쿼리 언어를 통해 클라이언트와 서버 간의 데이터 교환에 유연성과 효율성을 제공합니다.

아래에서는 React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법을 단계별로 소개합니다. Node.js를 백엔드 서버로 사용하고 Express.js를 서버 프레임워크로 사용합니다.

1단계: 필요한 종속성 설치
먼저 React 및 GraphQL에 대한 관련 종속성을 설치해야 합니다. 명령줄에서 npm 또는 Yarn을 사용하여 다음 종속성을 설치합니다.

npm install react react-dom graphql express express-graphql

2단계: Express 서버 설정
다음으로 Express 서버를 설정하고 GraphQL 엔드포인트를 생성하겠습니다. 프로젝트의 루트 디렉터리에 server.js라는 파일을 생성하고 다음 코드를 추가합니다.

const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// 创建GraphQL schema
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// 定义GraphQL resolver
const root = {
  hello: () => 'Hello, World!'
};

// 创建Express app
const app = express();

// 设置GraphQL端点
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true
}));

// 启动服务器
app.listen(4000, () => {
  console.log('GraphQL server is running at http://localhost:4000/graphql');
});

위 코드에서는 먼저 buildSchema 함수를 사용하여 간단한 GraphQL 스키마를 생성했습니다. hello라는 쿼리 필드가 정의되었습니다. 그런 다음 쿼리 필드에 대한 파서 함수가 포함된 root 개체를 만듭니다. 마지막으로 Express 애플리케이션을 생성하고 graphqlHTTP 미들웨어를 사용하여 GraphQL 엔드포인트를 설정했습니다. buildSchema函数创建了一个简单的GraphQL schema,其中定义了一个名为hello的查询字段。然后,我们创建了一个root对象,其中包含了查询字段的解析器函数。最后,我们创建了一个Express应用程序并使用graphqlHTTP中间件设置了GraphQL端点。

第三步:创建React组件
在项目的根目录下,创建一个名为App.js的文件,添加以下代码:

import React from 'react';
import { gql, useQuery } from '@apollo/client';

// 定义GraphQL查询
const GET_HELLO = gql`
  query {
    hello
  }
`;

function App() {
  const { loading, error, data } = useQuery(GET_HELLO);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;

  return (
    <div>
      <h1>{data.hello}</h1>
    </div>
  );
}

export default App;

在上述代码中,我们使用了@apollo/client库来执行GraphQL查询。我们定义了一个名为GET_HELLO的查询,并使用useQuery钩子来执行该查询。根据查询结果的不同状态,我们返回不同的组件。

第四步:渲染React应用
在项目的根目录下,编辑index.js文件并添加以下代码:

import React from 'react';
import ReactDOM from 'react-dom';
import { ApolloProvider, ApolloClient, InMemoryCache } from '@apollo/client';
import App from './App';

// 创建Apollo客户端
const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache()
});

ReactDOM.render(
  <React.StrictMode>
    <ApolloProvider client={client}>
      <App />
    </ApolloProvider>
  </React.StrictMode>,
  document.getElementById('root')
);

我们使用@apollo/client库创建了一个Apollo客户端,并设置了GraphQL端点的URL。然后,我们使用ApolloProvider

3단계: React Component 생성

프로젝트의 루트 디렉터리에 App.js라는 파일을 생성하고 다음 코드를 추가합니다.

npm start

위 코드에서는 @apollo/client GraphQL 쿼리를 실행하는 라이브러리입니다. <code>GET_HELLO라는 쿼리를 정의하고 useQuery 후크를 사용하여 쿼리를 실행합니다. 쿼리 결과의 상태에 따라 다른 구성 요소를 반환합니다.

4단계: React 애플리케이션 렌더링

프로젝트의 루트 디렉터리에서 index.js 파일을 편집하고 다음 코드를 추가합니다.
rrreee

@apollo/client를 사용하여 Apollo 클라이언트를 생성했습니다. > library , GraphQL 엔드포인트의 URL을 설정합니다. 그런 다음 ApolloProvider 구성 요소를 사용하여 Apollo 클라이언트를 React 애플리케이션에 바인딩했습니다. 🎜🎜5단계: 애플리케이션 실행 🎜명령줄에서 다음 명령을 사용하여 애플리케이션을 시작합니다. 🎜rrreee🎜이제 http://localhost:4000/graphql에 액세스하고 http://에 액세스하여 GraphQL 인터페이스를 볼 수 있습니다. /localhost:3000을 사용하여 React 애플리케이션에 액세스합니다. 🎜🎜결론🎜이 글에서는 React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법을 설명합니다. React 및 GraphQL용 샘플 코드를 통해 Express 서버를 설정하고, GraphQL 스키마 및 해석기를 생성하고, React 애플리케이션에서 GraphQL 쿼리를 실행하는 방법을 보여줍니다. React와 GraphQL을 사용하면 효율적이고 유연하며 확장 가능한 API 인터페이스를 구축하여 확장성 요구 사항을 더 잘 충족할 수 있습니다. 🎜

위 내용은 React와 GraphQL을 사용하여 확장 가능한 API 인터페이스를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.