cari
Rumahhujung hadapan webtutorial jsAplikasi dan Kelebihan GraphQL dalam Aplikasi Web Moden

Applications and Advantages of GraphQL in Modern Web Applications

GraphQL ialah bahasa pertanyaan API moden yang digunakan secara meluas dalam aplikasi web moden kerana ia menyediakan cara yang cekap, fleksibel dan berkuasa untuk mendapatkan data

Contoh aplikasi pantas asas GraphQL:

1. Tetapan hujung belakang (menggunakan graphql-yoga)

Pertama, kita perlu mencipta pelayan GraphQL. Pasang graphql-yoga dan buat skema GraphQL yang mudah:

npm init -y
npm install graphql yoga graphql-yoga

# server.js
const { GraphQLServer } = require('graphql-yoga');

const typeDefs = `
  type Query {
    hello: String
  }

  type Mutation {
    addMessage(message: String!): String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
  Mutation: {
    addMessage: (_, { message }) => `You added the message "${message}"`,
  },
};

const server = new GraphQLServer({ typeDefs, resolvers });
server.start(() => console.log(`Server is running on http://localhost:4000`));

2. Persediaan bahagian hadapan (menggunakan Apollo Client)

Seterusnya, kami perlu mengkonfigurasi Pelanggan Apollo dalam aplikasi bahagian hadapan untuk berkomunikasi dengan pelayan GraphQL kami:

npm install apollo-boost @apollo/client graphql

# client.js
import ApolloClient from 'apollo-boost';
import { InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache(),
});

export default client;

3. Tulis komponen bahagian hadapan

Kini, kami menggunakan Apollo Client dalam komponen React untuk melakukan pertanyaan dan mutasi:

// App.js
import React from 'react';
import { gql, useQuery, useMutation } from '@apollo/client';
import client from './client';

const GET_HELLO = gql`
  query GetHello {
    hello
  }
`;

const ADD_MESSAGE_MUTATION = gql`
  mutation AddMessage($message: String!) {
    addMessage(message: $message)
  }
`;

function App() {
  const { loading, error, data } = useQuery(GET_HELLO);
  const [addMessage, { data: mutationData }] = useMutation(ADD_MESSAGE_MUTATION);

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

  return (
    <div>
      <h1 id="data-hello">{data.hello}</h1>
      <button onclick="{()"> addMessage({ variables: { message: 'Hello from frontend!' } })}>
        Add Message
      </button>
      {mutationData && <p>New message: {mutationData.addMessage}</p>}
    </div>
  );
}
export default App;

Kami membuat pertanyaan GET_HELLO untuk mendapatkan salam pelayan dan memaparkannya pada halaman. Pada masa yang sama, kami mentakrifkan operasi mutasi ADD_MESSAGE_MUTATION, yang akan menghantar mesej baharu kepada pelayan apabila pengguna mengklik butang.

4. Jalankan aplikasi

Mulakan pelayan bahagian belakang:

node server.js

Kemudian mulakan aplikasi bahagian hadapan, dengan anggapan Cipta Apl Reaksi:

npm start

Pertanyaan Asas GraphQL

1. Bahasa Pertanyaan: Pertanyaan, Mutasi, Langganan

Dalam GraphQL, pertanyaan dan mutasi ialah rentetan yang diwakili oleh struktur seperti JSON. Berikut ialah contoh mudah:

# Query Example
query GetUser {
  user(id: 1) {
    name
    email
  }
}

# Mutation Example
mutation CreateUser {
  createUser(name: "Alice", email: "alice@example.com") {
    id
    name
  }
}

# Subscription Example (Assuming WebSocket)
subscription OnNewUser {
  newUser {
    id
    name
  }
}

Dalam kod di atas, pertanyaan GetUser meminta nama dan e-mel pengguna dengan ID pengguna 1. Mutasi CreateUser mencipta pengguna baharu dan mengembalikan ID dan nama pengguna baharu. Langganan OnNewUser menunggu pengguna baharu dibuat dan mengembalikan maklumat pengguna baharu.

2. Sistem Jenis

Di bahagian belakang, kami mentakrifkan skema GraphQL untuk menerangkan jenis ini:

type User {
  id: ID!
  name: String!
  email: String!
}

type Mutation {
  createUser(name: String!, email: String!): User
}

type Subscription {
  newUser: User
}

Di sini kami mentakrifkan jenis objek Pengguna, jenis Mutasi untuk operasi mutasi dan jenis Langganan untuk operasi langganan.

3. Struktur pertanyaan: medan dan parameter

Struktur pertanyaan terdiri daripada medan dan parameter. Dalam contoh pertanyaan di atas, pengguna ialah medan dan id serta e-mel ialah subbidang bagi medan pengguna. Parameter seperti id: 1 digunakan untuk menyesuaikan pertanyaan.

4. Hierarki dan bersarang

Pertanyaan GrafikQL boleh bersarang. Berikut ialah contoh yang lebih kompleks:

query GetUsersAndPosts {
  users {
    id
    name
    posts {
      id
      title
      content
      author {
        id
        name
      }
    }
  }
}

Pertanyaan ini meminta semua pengguna dan siaran masing-masing, yang juga termasuk maklumat tentang pengarang. Hierarki membenarkan berbilang peringkat data diambil dalam satu permintaan.

Contoh Kod Pelanggan (Menggunakan Pelanggan Apollo)

npm init -y
npm install graphql yoga graphql-yoga

# server.js
const { GraphQLServer } = require('graphql-yoga');

const typeDefs = `
  type Query {
    hello: String
  }

  type Mutation {
    addMessage(message: String!): String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
  Mutation: {
    addMessage: (_, { message }) => `You added the message "${message}"`,
  },
};

const server = new GraphQLServer({ typeDefs, resolvers });
server.start(() => console.log(`Server is running on http://localhost:4000`));

Dalam komponen React ini, kami menggunakan useQuery untuk mengambil data daripada pelayan GraphQL dan memberikan maklumat tentang pengguna dan siaran mereka. Beginilah cara pertanyaan GraphQL, sistem jenis dan hierarki dimainkan.

Skema GraphQL

GraphQL Schema Definition Language (SDL) ialah bahasa untuk menerangkan skema GraphQL. Ia mentakrifkan jenis data, pertanyaan, mutasi dan arahan dalam format ringkas dan boleh dibaca manusia.

Tentukan jenis
Mula-mula, mari kita tentukan beberapa jenis data asas. Contohnya, tentukan jenis Pengguna dan jenis Siaran.

npm install apollo-boost @apollo/client graphql

# client.js
import ApolloClient from 'apollo-boost';
import { InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache(),
});

export default client;

Di sini, jenis Pengguna mempunyai id, nama pengguna, medan e-mel dan medan siaran yang dipautkan kepada berbilang Siaran. Jenis Siaran mengandungi id, tajuk, medan kandungan dan medan pengarang yang menunjuk kepada Pengguna.

Akar pertanyaan dan akar mutasi
Seterusnya, tentukan jenis akar pertanyaan GraphQL (Pertanyaan) dan punca mutasi (Mutasi), yang merupakan titik masuk untuk pelanggan meminta data dan mengubah suai data.

// App.js
import React from 'react';
import { gql, useQuery, useMutation } from '@apollo/client';
import client from './client';

const GET_HELLO = gql`
  query GetHello {
    hello
  }
`;

const ADD_MESSAGE_MUTATION = gql`
  mutation AddMessage($message: String!) {
    addMessage(message: $message)
  }
`;

function App() {
  const { loading, error, data } = useQuery(GET_HELLO);
  const [addMessage, { data: mutationData }] = useMutation(ADD_MESSAGE_MUTATION);

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

  return (
    <div>
      <h1 id="data-hello">{data.hello}</h1>
      <button onclick="{()"> addMessage({ variables: { message: 'Hello from frontend!' } })}>
        Add Message
      </button>
      {mutationData && <p>New message: {mutationData.addMessage}</p>}
    </div>
  );
}
export default App;

Dalam jenis Pertanyaan, kami mentakrifkan pertanyaan untuk mendapatkan pengguna tunggal, semua pengguna, siaran tunggal dan semua siaran. Dalam jenis Mutasi, kami mentakrifkan operasi untuk mencipta pengguna baharu dan siaran baharu.

Memahami dan menggunakan Arahan
Arahan ialah arahan dalam skema GraphQL yang mengubah tingkah laku pelaksanaan. Ia boleh digunakan pada mana-mana bahagian definisi sistem jenis, seperti medan, jenis input, jenis objek, dll. Berikut menunjukkan cara menggunakan arahan @auth tersuai untuk mengawal hak akses.

Pertama, katakan kami mentakrifkan arahan @auth untuk menyekat akses kepada medan tertentu dan memerlukan pengguna log masuk.

node server.js

Seterusnya, gunakan arahan ini dalam skema:

npm start

Dalam contoh di atas, medan pertanyaan saya dan nama pengguna boleh diakses tanpa kebenaran khas, tetapi untuk mengakses medan e-mel pengguna memerlukan kebenaran pentadbir (dinyatakan oleh arahan @auth(requires: ADMIN).

Aplikasi Lanjutan GraphQL

1. Penomboran

Gunakan penomboran berasaskan Kursor GraphQL untuk meningkatkan prestasi dan pengalaman pengguna.

Takrifan skema:

# Query Example
query GetUser {
  user(id: 1) {
    name
    email
  }
}

# Mutation Example
mutation CreateUser {
  createUser(name: "Alice", email: "alice@example.com") {
    id
    name
  }
}

# Subscription Example (Assuming WebSocket)
subscription OnNewUser {
  newUser {
    id
    name
  }
}

Contoh penyelesai:

type User {
  id: ID!
  name: String!
  email: String!
}

type Mutation {
  createUser(name: String!, email: String!): User
}

type Subscription {
  newUser: User
}

2. Ralat pengendalian

Sesuaikan pengendalian ralat untuk meningkatkan keupayaan pelanggan menangani ralat.

Contoh penyelesai:

query GetUsersAndPosts {
  users {
    id
    name
    posts {
      id
      title
      content
      author {
        id
        name
      }
    }
  }
}

3. Arahan tersuai

Buat arahan tersuai untuk melaksanakan logik perniagaan atau keperluan keselamatan tertentu.

Takrifan skema:

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

const GET_USERS_AND_POSTS = gql`
  query GetUsersAndPosts {
    users {
      id
      name
      posts {
        id
        title
        content
        author {
          id
          name
        }
      }
    }
  }
`;

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

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

  return (
    <div>
      {data.users.map(user => (
        <div key="{user.id}">
          <h2 id="user-name">{user.name}</h2>
          <ul>
            {user.posts.map(post => (
              <li key="{post.id}">
                <h3 id="post-title">{post.title}</h3>
                <p>{post.content}</p>
                <p>Author: {post.author.name}</p>
              </li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
}

export default App;

Contoh penyelesai:

type User {
  id: ID!
  username: String!
  email: String!
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
}

Pastikan anda mendaftar pengendali arahan ini dalam konfigurasi pelayan GraphQL anda.

4. Persekutuan GraphQL

Persekutuan membenarkan membina API GraphQL tunggal yang terdiri daripada berbilang perkhidmatan.

Skema Perkhidmatan A:

npm init -y
npm install graphql yoga graphql-yoga

# server.js
const { GraphQLServer } = require('graphql-yoga');

const typeDefs = `
  type Query {
    hello: String
  }

  type Mutation {
    addMessage(message: String!): String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
  Mutation: {
    addMessage: (_, { message }) => `You added the message "${message}"`,
  },
};

const server = new GraphQLServer({ typeDefs, resolvers });
server.start(() => console.log(`Server is running on http://localhost:4000`));

Skema Perkhidmatan B:

npm install apollo-boost @apollo/client graphql

# client.js
import ApolloClient from 'apollo-boost';
import { InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache: new InMemoryCache(),
});

export default client;

5. Pengoptimuman pertanyaan kompleks

Gunakan penyelesai medan GraphQL dan pemuat data untuk mengoptimumkan prestasi.

Contoh Pemuat Data:

// App.js
import React from 'react';
import { gql, useQuery, useMutation } from '@apollo/client';
import client from './client';

const GET_HELLO = gql`
  query GetHello {
    hello
  }
`;

const ADD_MESSAGE_MUTATION = gql`
  mutation AddMessage($message: String!) {
    addMessage(message: $message)
  }
`;

function App() {
  const { loading, error, data } = useQuery(GET_HELLO);
  const [addMessage, { data: mutationData }] = useMutation(ADD_MESSAGE_MUTATION);

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

  return (
    <div>
      <h1 id="data-hello">{data.hello}</h1>
      <button onclick="{()"> addMessage({ variables: { message: 'Hello from frontend!' } })}>
        Add Message
      </button>
      {mutationData && <p>New message: {mutationData.addMessage}</p>}
    </div>
  );
}
export default App;

Ciri dan Kelebihan GraphQL

  • Pengoptimuman prestasi: Dengan mendapatkan data atas permintaan, overhed penghantaran rangkaian dikurangkan dan kelajuan pemuatan halaman dipertingkatkan.
  • Kurangkan ralat: Pelanggan mentakrifkan struktur pertanyaan dan pelayan mengembalikan bentuk yang diharapkan, mengurangkan ralat yang disebabkan oleh ketidakpadanan antara muka.
  • Reka bentuk API yang lebih baik: Sistem jenis yang kukuh memastikan ketekalan dan ketepatan data, menjadikan API lebih mudah difahami dan diselenggara.
  • Kawalan pelanggan: Pelanggan boleh menentukan jumlah data yang perlu diperoleh dan masa untuk mendapatkannya, yang meningkatkan pengalaman pengguna.
  • Pengoptimuman cache: Pelanggan boleh melaksanakan strategi caching dengan lebih mudah berdasarkan struktur data yang dikembalikan.
  • Kurangkan kerumitan bahagian belakang: Bahagian belakang tidak lagi perlu mencipta berbilang titik akhir API untuk memenuhi keperluan pelanggan yang berbeza.

Atas ialah kandungan terperinci Aplikasi dan Kelebihan GraphQL dalam Aplikasi Web Moden. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Aplikasi JavaScript: Dari Front-End ke Back-EndAplikasi JavaScript: Dari Front-End ke Back-EndMay 04, 2025 am 12:12 AM

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Python vs JavaScript: Bahasa mana yang harus anda pelajari?Python vs JavaScript: Bahasa mana yang harus anda pelajari?May 03, 2025 am 12:10 AM

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Rangka Kerja JavaScript: Menguasai Pembangunan Web ModenRangka Kerja JavaScript: Menguasai Pembangunan Web ModenMay 02, 2025 am 12:04 AM

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Hubungan antara JavaScript, C, dan penyemak imbasHubungan antara JavaScript, C, dan penyemak imbasMay 01, 2025 am 12:06 AM

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

Aliran node.js dengan typescriptAliran node.js dengan typescriptApr 30, 2025 am 08:22 AM

Node.js cemerlang pada I/O yang cekap, sebahagian besarnya terima kasih kepada aliran. Aliran memproses data secara berperingkat, mengelakkan beban memori-ideal untuk fail besar, tugas rangkaian, dan aplikasi masa nyata. Menggabungkan sungai dengan keselamatan jenis typescript mencipta powe

Python vs JavaScript: Pertimbangan Prestasi dan KecekapanPython vs JavaScript: Pertimbangan Prestasi dan KecekapanApr 30, 2025 am 12:08 AM

Perbezaan prestasi dan kecekapan antara Python dan JavaScript terutamanya dicerminkan dalam: 1) sebagai bahasa yang ditafsirkan, Python berjalan perlahan tetapi mempunyai kecekapan pembangunan yang tinggi dan sesuai untuk pembangunan prototaip pesat; 2) JavaScript adalah terhad kepada benang tunggal dalam penyemak imbas, tetapi I/O multi-threading dan asynchronous boleh digunakan untuk meningkatkan prestasi dalam node.js, dan kedua-duanya mempunyai kelebihan dalam projek sebenar.

Asal JavaScript: Meneroka Bahasa PelaksanaannyaAsal JavaScript: Meneroka Bahasa PelaksanaannyaApr 29, 2025 am 12:51 AM

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.

Di sebalik tabir: Apa bahasa JavaScript?Di sebalik tabir: Apa bahasa JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.