API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) · पाठ

कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर

आने वाले अनुरोधों या बाहर जाने वाली प्रतिक्रियाओं में बदलाव करने के लिए विशिष्ट तर्क वाले अपने कस्टम फ़िल्टर विकसित कीजिए।

पाठ 2, कुल 4 में से11 चरण

कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर, CoddyKit पर API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कस्टम फ़िल्टर क्यों?

Spring Cloud Gateway कई अंतर्निर्मित फ़िल्टर प्रदान करता है, लेकिन कभी-कभी आपको बहुत विशिष्ट तर्क की आवश्यकता होती है। कस्टम फ़िल्टर आपको अनुरोध/प्रतिक्रिया प्रवाह में अपना कोड शामिल करने देते हैं।

इससे आप अत्यधिक अनुकूलित प्रसंस्करण कर सकते हैं, जैसे कस्टम प्रमाणीकरण जाँच, विशिष्ट लॉगिंग प्रारूप या खास हेडर में बदलाव।

GatewayFilter इंटरफ़ेस

कस्टम फ़िल्टर बनाने के लिए आप GatewayFilter इंटरफ़ेस लागू करेंगे। इस इंटरफ़ेस में एक मुख्य विधि है: filter()।

  • ServerWebExchange exchange: HTTP अनुरोध और प्रतिक्रिया तक पहुँच प्रदान करता है।
  • GatewayFilterChain chain: आपको अनुरोध को अगले फ़िल्टर या लक्षित सेवा तक भेजने देता है।

अपने फ़िल्टर की निष्पादन प्राथमिकता निर्धारित करने के लिए आप अक्सर Ordered भी लागू करेंगे।

मूल अनुरोध लॉगर फ़िल्टर

आइए, एक सरल फ़िल्टर बनाएँ, जो आने वाले अनुरोध का पथ और विधि लॉग करे। यह फ़िल्टर अनुरोध को बैकएंड सेवा तक भेजे जाने से पहले चलेगा।

ध्यान दें कि प्रसंस्करण जारी रखने के लिए chain.filter(exchange) को कैसे कॉल किया गया है।

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public class MyLoggingFilter implements GatewayFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("Incoming Request:");
        System.out.println("  Path: " + exchange.getRequest().getPath());
        System.out.println("  Method: " + exchange.getRequest().getMethod());
        return chain.filter(exchange); // Pass to next filter/service
    }

    @Override
    public int getOrder() {
        return -1; // Execute early
    }

    public static void main(String[] args) {
        MyLoggingFilter filter = new MyLoggingFilter();
        System.out.println("This filter logs request details.");
        System.out.println("In a Spring Gateway app, this code runs for each matched request.");
        System.out.println("The 'filter' method is the core logic, 'getOrder' sets priority.");
    }
}

अपने कस्टम फ़िल्टर का पंजीकरण

फ़िल्टर क्लास बनाने के बाद आपको Spring Cloud Gateway को बताना होगा कि उसका उपयोग करना है। आप इसे अपनी application.yml फ़ाइल में या प्रोग्राम के माध्यम से पंजीकृत कर सकते हैं।

सरल फ़िल्टर के लिए सीधे किसी रूट पर पंजीकरण करना सामान्य है। अधिक जटिल और पुनः उपयोग योग्य फ़िल्टर के लिए अक्सर फ़िल्टर फ़ैक्टरी का उपयोग किया जाता है (जिसे बाद में समझाया जाएगा)।

spring:
  cloud:
    gateway:
      routes:
        - id: my_custom_route
          uri: http://localhost:8081
          predicates:
            - Path=/api/**
          filters:
            - MyLoggingFilter # Name of your @Component filter

अनुरोध और प्रतिक्रिया तक पहुँचना

ServerWebExchange ऑब्जेक्ट वर्तमान HTTP इंटरैक्शन से जुड़ी हर चीज़ तक पहुँचने का माध्यम है। इसमें ServerHttpRequest और ServerHttpResponse शामिल होते हैं।

  • exchange.getRequest(): आने वाले अनुरोध का विवरण प्राप्त करें (हेडर, बॉडी और पथ)।
  • exchange.getResponse(): बाहर भेजी जाने वाली प्रतिक्रिया में बदलाव करें (हेडर और स्थिति कोड)।

याद रखें, ये प्रतिक्रियाशील प्रकार हैं, इसलिए इनके संचालन से अक्सर Mono या Flux प्राप्त होता है।

अनुरोध हेडर में बदलाव

बैकएंड सेवा को अनुरोध भेजने से पहले आपको हेडर जोड़ने या उनमें बदलाव करने की आवश्यकता हो सकती है। उदाहरण के लिए, प्रमाणीकरण टोकन या ट्रेसिंग ID शामिल करना।

चूँकि ServerHttpRequest अपरिवर्तनीय है, इसलिए आपको mutate() का उपयोग करके नया अनुरोध बनाना होगा और फिर exchange को अपडेट करना होगा।

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public class AddAuthHeaderFilter implements GatewayFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String authToken = "my-secret-token-123"; // Get from config/service
        ServerWebExchange mutatedExchange = exchange.mutate()
            .request(builder -> builder.header("X-Auth-Token", authToken))
            .build();
        System.out.println("Added X-Auth-Token header to request.");
        return chain.filter(mutatedExchange); // Use the mutated exchange
    }

    @Override
    public int getOrder() {
        return 0; // After logging, before forwarding
    }

    public static void main(String[] args) {
        AddAuthHeaderFilter filter = new AddAuthHeaderFilter();
        System.out.println("This filter adds an 'X-Auth-Token' header.");
        System.out.println("It uses 'exchange.mutate().request(...).build()' to modify the request.");
    }
}

प्रतिक्रिया हेडर में बदलाव

कस्टम फ़िल्टर बैकएंड सेवा द्वारा अपनी प्रतिक्रिया भेजने के बाद भी प्रतिक्रिया में बदलाव कर सकते हैं। यह सुरक्षा हेडर, कैशिंग निर्देश या कस्टम मेटाडेटा जोड़ने के लिए उपयोगी है।

इसके लिए exchange.getResponse().beforeCommit() का उपयोग करके प्रतिक्रिया जीवनचक्र या प्रतिक्रियाशील चेनिंग से जुड़ना होता है।

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public class AddResponseHeaderFilter implements GatewayFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            // This code runs AFTER the response from backend is received
            exchange.getResponse().getHeaders().add("X-Gateway-Processed", "true");
            System.out.println("Added X-Gateway-Processed header to response.");
        }));
    }

    @Override
    public int getOrder() {
        return 1; // After request processing
    }

    public static void main(String[] args) {
        AddResponseHeaderFilter filter = new AddResponseHeaderFilter();
        System.out.println("This filter adds 'X-Gateway-Processed' to the response.");
        System.out.println("It uses 'chain.filter(exchange).then(Mono.fromRunnable(...))' for post-processing.");
    }
}

फ़िल्टर क्रम नियंत्रित करना

जब आपके पास कई कस्टम फ़िल्टर हों, तो उनका निष्पादन क्रम महत्वपूर्ण होता है। Ordered इंटरफ़ेस (और उसकी getOrder() विधि) आपको यह निर्धारित करने देती है।

  • कम मान (जैसे -1) का अर्थ है अधिक प्राथमिकता (पहले निष्पादित होना)।
  • अधिक मान (जैसे 1) का अर्थ है कम प्राथमिकता (बाद में निष्पादित होना)।
  • समान क्रम वाले फ़िल्टर किसी अनिश्चित क्रम में चल सकते हैं।

विशेष स्थितियों के लिए Ordered.HIGHEST_PRECEDENCE या LOWEST_PRECEDENCE का उपयोग करें।

कस्टम GatewayFilter फ़ैक्टरियाँ

अधिक उन्नत स्थितियों में, खासकर जब आपके फ़िल्टर को कॉन्फ़िगरेशन की आवश्यकता हो (जैसे किसी विशिष्ट हेडर का नाम या सीमा मान), आप GatewayFilterFactory बना सकते हैं।

इससे आप ऐसे पैरामीटर वाले फ़िल्टर परिभाषित कर सकते हैं, जिन्हें सीधे अपनी application.yml में कॉन्फ़िगर किया जा सकता है। इससे आपके फ़िल्टर अत्यधिक पुनः उपयोग योग्य और लचीले बनते हैं।

आप AbstractGatewayFilterFactory का विस्तार करेंगे और इसके गुणों के लिए एक कॉन्फ़िगरेशन क्लास परिभाषित करेंगे।

फ़िल्टर तर्क जाँच

एक ऐसे कस्टम GatewayFilter पर विचार कीजिए, जिसे अनुरोध हेडर जोड़ना हो और फिर बैकएंड की प्रतिक्रिया मिलने के बाद प्रतिक्रिया हेडर भी जोड़ना हो। आप filter() विधि के किन भागों में बदलाव करेंगे?

पुनरावलोकन: कस्टम फ़िल्टर की शक्ति

आपने Spring Cloud Gateway में कस्टम GatewayFilter बनाना सीख लिया है। ये फ़िल्टर आपके API गेटवे के अनुरोध और प्रतिक्रिया प्रवाह में विशिष्ट तर्क शामिल करने के शक्तिशाली साधन हैं।

  • GatewayFilter और Ordered लागू करें।
  • अनुरोध और प्रतिक्रिया तक पहुँचने के लिए ServerWebExchange का उपयोग करें।
  • अनुरोधों में बदलाव करें और प्रतिक्रिया में बदलाव के लिए प्रतिक्रियाशील चेनिंग का उपयोग करें।
  • getOrder() से निष्पादन क्रम नियंत्रित करें।

कस्टम फ़िल्टर आपको अपने गेटवे के व्यवहार को सटीक रूप से अनुकूलित करने के लिए बारीकी से नियंत्रण देते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर” पाठ निःशुल्क है?

हाँ—“कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर” में मैं क्या सीखूँगा?

आने वाले अनुरोधों या बाहर जाने वाली प्रतिक्रियाओं में बदलाव करने के लिए विशिष्ट तर्क वाले अपने कस्टम फ़िल्टर विकसित कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. वैश्विक फ़िल्टर और GatewayFilterFactory
  2. कस्टम अनुरोध और प्रतिक्रिया फ़िल्टर
  3. फ़िल्टर से पूर्व और पश्च-प्रसंस्करण
  4. उपयोगी अंतर्निहित GatewayFilters
← API गेटवे और रिवर्स प्रॉक्सी (Nginx + Spring Cloud Gateway) पर वापस जाएँ