Lingara Lingara दस्तावेज़ मार्गदर्शिकाएँ API लाइब्रेरी ऐप बनाएं वेब ऐप
भाषा: हिन्दी

ऑथेंटिकेशन

यह पेज अंग्रेज़ी से अनुवादित है। अगर दोनों में अंतर हो, तो अंग्रेज़ी पेज सही है। अंग्रेज़ी पेज पढ़ें

आप किसी OAuth क्लाइंट के क्लाइंट ID और क्लाइंट सीक्रेट से एक क्लाइंट बनाते हैं। बाकी काम लाइब्रेरी करती है। वह आपसे कभी एक्सेस टोकन नहीं माँगती।

लाइब्रेरी आपके लिए क्या करती है

  • एक एक्सचेंज, सबके लिए साझा। टोकन की ज़रूरत वाली पहली कॉल आपके क्रेडेंशियल्स को एक टोकन से बदलती है। अगर कई कॉल एक साथ शुरू होती हैं, तो वे सब अपना-अपना एक्सचेंज शुरू करने के बजाय उसी एक एक्सचेंज का इंतज़ार करती हैं।
  • लगभग पुराना होने तक कैश में। टोकन की समय-सीमा खत्म होने से 60 सेकंड पहले तक उसे दोबारा इस्तेमाल किया जाता है, फिर अगली कॉल पर उसे बदल दिया जाता है। बैकग्राउंड में कुछ भी रीफ़्रेश नहीं होता, इसलिए निष्क्रिय प्रोसेस कोई अनुरोध नहीं भेजता।
  • 401 पर एक रीट्राई। अगर API किसी टोकन को अस्वीकार करता है, तो लाइब्रेरी उसे भूल जाती है, नया टोकन लाती है और कॉल को एक बार दोहराती है। दूसरा 401 API एरर के रूप में उठाया जाता है।
  • समय-सीमा वाला एक्सचेंज। जिस टोकन अनुरोध का कोई जवाब नहीं आता, वह 30 सेकंड बाद विफल हो जाता है, ताकि धीमा टोकन एंडपॉइंट हर कॉलर को रोक कर न रख सके।
  • लीक होने को कुछ नहीं। क्लाइंट सीक्रेट और हर एक्सेस टोकन लॉग, डीबग आउटपुट और एरर संदेशों में [REDACTED] के रूप में छपते हैं।

जिन ऑपरेशनों को टोकन की ज़रूरत नहीं होती, जैसे API संस्करणों की सूची देखना, वे कभी टोकन नहीं भेजते, इसलिए बिना क्रेडेंशियल्स के बनाया गया क्लाइंट भी उन्हें कॉल कर सकता है।

सीक्रेट को अपने सर्वर पर रखें

क्लाइंट सीक्रेट आपके ऐप्लिकेशन की पहचान करता है, आपके उपयोगकर्ताओं की नहीं। इसे अपने सर्वर के कॉन्फ़िगरेशन या सीक्रेट स्टोर में रखें, और इसे कभी भी ब्राउज़र या मोबाइल ऐप तक न भेजें।

कोड उदाहरण की भाषा

TypeScript

import { Lingara } from "@lingara/api";

const client = new Lingara({
  clientId: process.env.LINGARA_CLIENT_ID!,
  clientSecret: process.env.LINGARA_CLIENT_SECRET!,
});

Rust

use lingara::Client;

let client = Client::builder()
    .client_credentials(std::env::var("LINGARA_CLIENT_ID")?, std::env::var("LINGARA_CLIENT_SECRET")?)
    .build()?;

Go

import (
	"os"

	lingara "github.com/Spinning-Cat-Studios/lingara_api_clients/go"
)

client, err := lingara.New(
	lingara.WithClientCredentials(os.Getenv("LINGARA_CLIENT_ID"), os.Getenv("LINGARA_CLIENT_SECRET")),
)
if err != nil {
	return nil, err
}

Java

import com.getlingara.client.LingaraClient;

LingaraClient client =
    LingaraClient.builder()
        .clientCredentials(
            System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
        .build();

Kotlin

import com.getlingara.kotlin.LingaraClient

val client =
    LingaraClient {
        clientCredentials(System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
    }

Ruby

require "lingara"

client = Lingara::Client.new(client_id: client_id, client_secret: client_secret)

PHP

use Lingara\Client;

$client = new Client(clientId: $clientId, clientSecret: $clientSecret);

यह पेज क्या रैप करता है