தமிழ்

பல்வேறு உலகளாவிய பயனர்களுக்கு ஏற்ற, வலுவான மற்றும் பராமரிக்கக்கூடிய API-களை உருவாக்க, அளவிடக்கூடிய கிராஃப்கியூஎல் ஸ்கீமா வடிவமைப்பு உத்திகளைக் கற்றுக்கொள்ளுங்கள். ஸ்கீமா ஸ்டிச்சிங், ஃபெடரேஷன் மற்றும் மாடுலரைசேஷனில் தேர்ச்சி பெறுங்கள்.

கிராஃப்கியூஎல் ஸ்கீமா வடிவமைப்பு: உலகளாவிய API-களுக்கான அளவிடக்கூடிய உத்திகள்

பாரம்பரிய REST API-களுக்கு ஒரு சக்திவாய்ந்த மாற்றாக கிராஃப்கியூஎல் உருவெடுத்துள்ளது, வாடிக்கையாளர்களுக்கு தங்களுக்குத் தேவையான தரவை துல்லியமாகக் கோருவதற்கான நெகிழ்வுத்தன்மையை இது வழங்குகிறது. இருப்பினும், உங்கள் கிராஃப்கியூஎல் API சிக்கலானதாகவும், அதன் நோக்கம் விரிவடையும்போதும் – குறிப்பாக பல்வேறு தரவுத் தேவைகளைக் கொண்ட உலகளாவிய பயனர்களுக்கு சேவை செய்யும் போது – பராமரிப்பு, அளவிடுதல் மற்றும் செயல்திறனுக்கு கவனமான ஸ்கீமா வடிவமைப்பு மிகவும் முக்கியமானதாகிறது. இந்தக் கட்டுரை, உலகளாவிய பயன்பாட்டின் தேவைகளைக் கையாளக்கூடிய வலுவான API-களை உருவாக்க உதவும் பல அளவிடக்கூடிய கிராஃப்கியூஎல் ஸ்கீமா வடிவமைப்பு உத்திகளை ஆராய்கிறது.

அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பின் முக்கியத்துவம்

நன்கு வடிவமைக்கப்பட்ட ஒரு கிராஃப்கியூஎல் ஸ்கீமா ஒரு வெற்றிகரமான API-யின் அடித்தளமாகும். உங்கள் தரவு மற்றும் சேவைகளுடன் வாடிக்கையாளர்கள் எவ்வாறு தொடர்பு கொள்ளலாம் என்பதை இது தீர்மானிக்கிறது. மோசமான ஸ்கீமா வடிவமைப்பு பல சிக்கல்களுக்கு வழிவகுக்கும், அவற்றுள் சில:

உலகளாவிய பயன்பாடுகளுக்கு, இந்த சிக்கல்கள் மேலும் பெருகுகின்றன. வெவ்வேறு பிராந்தியங்களுக்கு வெவ்வேறு தரவுத் தேவைகள், ஒழுங்குமுறை கட்டுப்பாடுகள் மற்றும் செயல்திறன் எதிர்பார்ப்புகள் இருக்கலாம். அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பு இந்த சவால்களை திறம்பட எதிர்கொள்ள உங்களை அனுமதிக்கிறது.

அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பின் முக்கிய கோட்பாடுகள்

குறிப்பிட்ட உத்திகளைப் பார்ப்பதற்கு முன், உங்கள் ஸ்கீமா வடிவமைப்பை வழிநடத்த வேண்டிய சில முக்கிய கோட்பாடுகளை கோடிட்டுக் காட்டுவோம்:

அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பு உத்திகள்

வலுவான கிராஃப்கியூஎல் API-களை உருவாக்க நீங்கள் பயன்படுத்தக்கூடிய பல அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பு உத்திகள் இங்கே:

1. ஸ்கீமா ஸ்டிச்சிங் (Schema Stitching)

ஸ்கீமா ஸ்டிச்சிங் பல கிராஃப்கியூஎல் API-களை ஒரே, ஒருங்கிணைந்த ஸ்கீமாவாக இணைக்க உங்களை அனுமதிக்கிறது. உங்கள் தரவின் வெவ்வேறு பகுதிகளுக்கு வெவ்வேறு குழுக்கள் அல்லது சேவைகள் பொறுப்பாக இருக்கும்போது இது மிகவும் பயனுள்ளதாக இருக்கும். இது பல மினி-API-களைக் கொண்டு, அவற்றை ஒரு 'கேட்வே' API வழியாக இணைப்பது போன்றது.

இது எப்படி வேலை செய்கிறது:

  1. ஒவ்வொரு குழுவும் அல்லது சேவையும் அதன் சொந்த ஸ்கீமாவுடன் அதன் சொந்த கிராஃப்கியூஎல் API-ஐ வெளிப்படுத்துகிறது.
  2. ஒரு மைய கேட்வே சேவையானது, இந்த ஸ்கீமாக்களை ஒரே, ஒருங்கிணைந்த ஸ்கீமாவாக இணைக்க ஸ்கீமா ஸ்டிச்சிங் கருவிகளைப் (அப்போலோ ஃபெடரேஷன் அல்லது கிராஃப்கியூஎல் மெஷ் போன்றவை) பயன்படுத்துகிறது.
  3. வாடிக்கையாளர்கள் கேட்வே சேவையுடன் தொடர்பு கொள்கிறார்கள், அது கோரிக்கைகளை பொருத்தமான அடிப்படை API-களுக்கு அனுப்புகிறது.

உதாரணம்:

தயாரிப்புகள், பயனர்கள் மற்றும் ஆர்டர்களுக்கான தனித்தனி API-களைக் கொண்ட ஒரு இ-காமர்ஸ் தளத்தை கற்பனை செய்து பாருங்கள். ஒவ்வொரு API-க்கும் அதன் சொந்த ஸ்கீமா உள்ளது:

  
    # தயாரிப்புகள் API
    type Product {
      id: ID!
      name: String!
      price: Float!
    }

    type Query {
      product(id: ID!): Product
    }

    # பயனர்கள் API
    type User {
      id: ID!
      name: String!
      email: String!
    }

    type Query {
      user(id: ID!): User
    }

    # ஆர்டர்கள் API
    type Order {
      id: ID!
      userId: ID!
      productId: ID!
      quantity: Int!
    }

    type Query {
      order(id: ID!): Order
    }
  

கேட்வே சேவையானது இந்த ஸ்கீமாக்களை ஒன்றாக இணைத்து ஒரு ஒருங்கிணைந்த ஸ்கீமாவை உருவாக்க முடியும்:

  
    type Product {
      id: ID!
      name: String!
      price: Float!
    }

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

    type Order {
      id: ID!
      user: User! @relation(field: "userId")
      product: Product! @relation(field: "productId")
      quantity: Int!
    }

    type Query {
      product(id: ID!): Product
      user(id: ID!): User
      order(id: ID!): Order
    }
  

Order வகை இப்போது User மற்றும் Product வகைகளுக்கான குறிப்புகளைக் கொண்டிருப்பதை கவனியுங்கள், இந்த வகைகள் தனித்தனி API-களில் வரையறுக்கப்பட்டிருந்தாலும். இது ஸ்கீமா ஸ்டிச்சிங் டைரக்டிவ்கள் (இந்த எடுத்துக்காட்டில் @relation போன்றவை) மூலம் அடையப்படுகிறது.

நன்மைகள்:

கவனிக்க வேண்டியவை:

2. ஸ்கீமா ஃபெடரேஷன் (Schema Federation)

ஸ்கீமா ஃபெடரேஷன் என்பது ஸ்கீமா ஸ்டிச்சிங்கின் ஒரு பரிணாம வளர்ச்சியாகும், இது அதன் சில வரம்புகளை நிவர்த்தி செய்ய வடிவமைக்கப்பட்டுள்ளது. இது கிராஃப்கியூஎல் ஸ்கீமாக்களை இணைப்பதற்கு மேலும் அறிவிப்பு சார்ந்த மற்றும் தரப்படுத்தப்பட்ட அணுகுமுறையை வழங்குகிறது.

இது எப்படி வேலை செய்கிறது:

  1. ஒவ்வொரு சேவையும் ஒரு கிராஃப்கியூஎல் API-ஐ வெளிப்படுத்துகிறது மற்றும் அதன் ஸ்கீமாவை ஃபெடரேஷன் டைரக்டிவ்களுடன் (எ.கா., @key, @extends, @external) குறிக்கிறது.
  2. ஒரு மைய கேட்வே சேவையானது (அப்போலோ ஃபெடரேஷனைப் பயன்படுத்தி) இந்த டைரக்டிவ்களைப் பயன்படுத்தி ஒரு சூப்பர்கிராஃபை உருவாக்குகிறது – இது முழு ஃபெடரேட்டட் ஸ்கீமாவின் பிரதிநிதித்துவம் ஆகும்.
  3. கேட்வே சேவையானது சூப்பர்கிராஃபைப் பயன்படுத்தி கோரிக்கைகளை பொருத்தமான அடிப்படை சேவைகளுக்கு அனுப்பி சார்புகளைத் தீர்க்கிறது.

உதாரணம்:

அதே இ-காமர்ஸ் உதாரணத்தைப் பயன்படுத்தி, ஃபெடரேட்டட் ஸ்கீமாக்கள் இப்படி இருக்கலாம்:

  
    # தயாரிப்புகள் API
    type Product @key(fields: "id") {
      id: ID!
      name: String!
      price: Float!
    }

    type Query {
      product(id: ID!): Product
    }

    # பயனர்கள் API
    type User @key(fields: "id") {
      id: ID!
      name: String!
      email: String!
    }

    type Query {
      user(id: ID!): User
    }

    # ஆர்டர்கள் API
    type Order {
      id: ID!
      userId: ID!
      productId: ID!
      quantity: Int!
      user: User! @requires(fields: "userId")
      product: Product! @requires(fields: "productId")
    }

    extend type Query {
      order(id: ID!): Order
    }
  

ஃபெடரேஷன் டைரக்டிவ்களின் பயன்பாட்டைக் கவனியுங்கள்:

நன்மைகள்:

கவனிக்க வேண்டியவை:

3. கூறுநிலை ஸ்கீமா வடிவமைப்பு (Modular Schema Design)

கூறுநிலை ஸ்கீமா வடிவமைப்பு என்பது ஒரு பெரிய, ஒற்றை ஸ்கீமாவை சிறிய, மேலும் நிர்வகிக்கக்கூடிய கூறுகளாகப் பிரிப்பதாகும். இது ஃபெடரேட்டட் ஸ்கீமாக்களை நாடாமலேயே, உங்கள் API-யின் தனிப்பட்ட பகுதிகளைப் புரிந்துகொள்வதையும், மாற்றுவதையும், மீண்டும் பயன்படுத்துவதையும் எளிதாக்குகிறது.

இது எப்படி வேலை செய்கிறது:

  1. உங்கள் ஸ்கீமாவிற்குள் தர்க்கரீதியான எல்லைகளை (எ.கா., பயனர்கள், தயாரிப்புகள், ஆர்டர்கள்) அடையாளம் காணவும்.
  2. ஒவ்வொரு எல்லைக்கும் தனித்தனி கூறுகளை உருவாக்கவும், அந்த எல்லையுடன் தொடர்புடைய வகைகள், வினவல்கள் மற்றும் மாற்றங்களை வரையறுக்கவும்.
  3. கூறுகளை ஒரே, ஒருங்கிணைந்த ஸ்கீமாவாக இணைக்க இறக்குமதி/ஏற்றுமதி வழிமுறைகளைப் (உங்கள் கிராஃப்கியூஎல் சர்வர் செயலாக்கத்தைப் பொறுத்து) பயன்படுத்தவும்.

உதாரணம் (JavaScript/Node.js பயன்படுத்தி):

ஒவ்வொரு கூறுக்கும் தனித்தனி கோப்புகளை உருவாக்கவும்:

  
    // users.graphql
    type User {
      id: ID!
      name: String!
      email: String!
    }

    type Query {
      user(id: ID!): User
    }

    // products.graphql
    type Product {
      id: ID!
      name: String!
      price: Float!
    }

    type Query {
      product(id: ID!): Product
    }
  

பின்னர், அவற்றை உங்கள் பிரதான ஸ்கீமா கோப்பில் இணைக்கவும்:

  
    // schema.js
    const { makeExecutableSchema } = require('graphql-tools');
    const { typeDefs: userTypeDefs, resolvers: userResolvers } = require('./users');
    const { typeDefs: productTypeDefs, resolvers: productResolvers } = require('./products');

    const typeDefs = [
      userTypeDefs,
      productTypeDefs,
      ""
    ];

    const resolvers = {
      Query: {
        ...userResolvers.Query,
        ...productResolvers.Query,
      }
    };

    const schema = makeExecutableSchema({
      typeDefs,
      resolvers,
    });

    module.exports = schema;
  

நன்மைகள்:

கவனிக்க வேண்டியவை:

4. இன்டர்ஃபேஸ் மற்றும் யூனியன் வகைகள் (Interface and Union Types)

இன்டர்ஃபேஸ் மற்றும் யூனியன் வகைகள் பல உறுதியான வகைகளால் செயல்படுத்தப்படக்கூடிய சுருக்கமான வகைகளை வரையறுக்க உங்களை அனுமதிக்கின்றன. பாலிமார்பிக் தரவை - சூழலைப் பொறுத்து வெவ்வேறு வடிவங்களை எடுக்கக்கூடிய தரவை - பிரதிநிதித்துவப்படுத்த இது பயனுள்ளதாக இருக்கும்.

இது எப்படி வேலை செய்கிறது:

உதாரணம்:

  
    interface Node {
      id: ID!
    }

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

    type Product implements Node {
      id: ID!
      name: String!
      price: Float!
    }

    union SearchResult = User | Product

    type Query {
      node(id: ID!): Node
      search(query: String!): [SearchResult!]!
    }
  

இந்த எடுத்துக்காட்டில், User மற்றும் Product ஆகிய இரண்டும் Node இன்டர்ஃபேஸை செயல்படுத்துகின்றன, இது ஒரு பொதுவான id ஃபீல்டை வரையறுக்கிறது. SearchResult யூனியன் வகை ஒரு தேடல் முடிவைக் குறிக்கிறது, அது ஒரு User அல்லது ஒரு Product ஆக இருக்கலாம். வாடிக்கையாளர்கள் `search` ஃபீல்டை வினவலாம், பின்னர் அவர்கள் பெற்ற முடிவு எந்த வகை என்பதைத் தீர்மானிக்க `__typename` ஃபீல்டைப் பயன்படுத்தலாம்.

நன்மைகள்:

கவனிக்க வேண்டியவை:

5. இணைப்பு உத்தி (Connection Pattern)

இணைப்பு உத்தி என்பது கிராஃப்கியூஎல் API-களில் பக்க அமைப்பை (Pagination) செயல்படுத்துவதற்கான ஒரு நிலையான வழியாகும். இது பெரிய தரவுப் பட்டியல்களைப் பகுதிகளாகப் பெறுவதற்கு ஒரு சீரான மற்றும் திறமையான வழியை வழங்குகிறது.

இது எப்படி வேலை செய்கிறது:

உதாரணம்:

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

    type UserEdge {
      node: User!
      cursor: String!
    }

    type UserConnection {
      edges: [UserEdge!]!
      pageInfo: PageInfo!
    }

    type PageInfo {
      hasNextPage: Boolean!
      hasPreviousPage: Boolean!
      startCursor: String
      endCursor: String
    }

    type Query {
      users(first: Int, after: String, last: Int, before: String): UserConnection!
    }
  

நன்மைகள்:

கவனிக்க வேண்டியவை:

உலகளாவிய பரிசீலனைகள்

உலகளாவிய பார்வையாளர்களுக்காக ஒரு கிராஃப்கியூஎல் ஸ்கீமாவை வடிவமைக்கும்போது, இந்த கூடுதல் காரணிகளைக் கவனியுங்கள்:

உதாரணமாக, ஒரு தயாரிப்பு விளக்க ஃபீல்டைக் கருத்தில் கொள்ளுங்கள்:


type Product {
 id: ID!
 name: String!
 description(language: String = "en"): String!
}

இது வாடிக்கையாளர்கள் ஒரு குறிப்பிட்ட மொழியில் விளக்கத்தைக் கோர அனுமதிக்கிறது. எந்த மொழியும் குறிப்பிடப்படவில்லை என்றால், அது ஆங்கிலத்திற்கு (`en`) இயல்புநிலையாக இருக்கும்.

முடிவுரை

உலகளாவிய பயன்பாட்டின் தேவைகளைக் கையாளக்கூடிய வலுவான மற்றும் பராமரிக்கக்கூடிய கிராஃப்கியூஎல் API-களை உருவாக்க அளவிடக்கூடிய ஸ்கீமா வடிவமைப்பு அவசியம். இந்தக் கட்டுரையில் கோடிட்டுக் காட்டப்பட்டுள்ள கோட்பாடுகளைப் பின்பற்றுவதன் மூலமும், பொருத்தமான வடிவமைப்பு உத்திகளைப் பயன்படுத்துவதன் மூலமும், நீங்கள் புரிந்துகொள்ள, மாற்றியமைக்க மற்றும் நீட்டிக்க எளிதான API-களை உருவாக்கலாம், அதே நேரத்தில் சிறந்த செயல்திறன் மற்றும் அளவிடுதல் ஆகியவற்றை வழங்கலாம். உங்கள் ஸ்கீமாவை கூறுநிலையாக்கவும், இணைக்கவும், மற்றும் சுருக்கவும், மேலும் உங்கள் உலகளாவிய பார்வையாளர்களின் குறிப்பிட்ட தேவைகளைக் கருத்தில் கொள்ளவும் நினைவில் கொள்ளுங்கள்.

இந்த உத்திகளை ஏற்றுக்கொள்வதன் மூலம், நீங்கள் கிராஃப்கியூஎல்லின் முழு திறனையும் வெளிக்கொணரலாம் மற்றும் வரவிருக்கும் பல ஆண்டுகளுக்கு உங்கள் பயன்பாடுகளுக்கு శక్తి அளிக்கக்கூடிய API-களை உருவாக்கலாம்.