Track
सालों में, मैंने अनगिनत कॉन्फ़िगरेशन फाइलों के साथ काम किया है, और YAML अपनी सादगी और पठनीयता के लिए अलग दिखाई देता है। चाहे Kubernetes में वर्कफ़्लो सेट करना हो, Docker में सेवाएँ परिभाषित करनी हों, या API रिक्वेस्ट स्ट्रक्चर करनी हों—YAML जटिल कॉन्फ़िगरेशन को अधिक संभालने योग्य बना देता है। इसका साफ-सुथरा, इंडेंटेशन-आधारित स्ट्रक्चर XML जैसे फ़ॉर्मैट्स की भीड़भाड़ को हटाते हुए लचीलापन बनाए रखता है।
इस गाइड में, मैं आपको YAML के सिंटैक्स, संरचना, उन्नत फीचर्स, और सर्वोत्तम प्रथाओं से परिचित कराऊँगा ताकि आप इसे आत्मविश्वास के साथ उपयोग कर सकें।
YAML क्या है?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) एक डेटा सीरियलाइज़ेशन फ़ॉर्मेट है जो पठनीयता और उपयोग में आसानी को प्राथमिकता देता है। जहाँ XML HTML-जैसे नेस्टेड टैग्स का मिश्रण उपयोग करता है और JSON कर्ली ब्रैकेट्स और कोट्स (कुछ हद तक Python डिक्शनरी की तरह) का, YAML अधिक संक्षिप्त होता है और संरचना को परिभाषित करने के लिए इंडेंटेशन का उपयोग करता है, जिससे यह मनुष्यों के लिए अधिक अनुकूल बनता है।
YAML विभिन्न डेटा प्रकारों का समर्थन करता है, जिनमें स्केलर (स्ट्रिंग्स, नंबर, बूलियन), सीक्वेंस (लिस्ट), और मैपिंग्स (की-वैल्यू पेयर्स) शामिल हैं। यह कॉन्फ़िगरेशन फाइलों, इंफ्रास्ट्रक्चर ऑटोमेशन, और डेटा एक्सचेंज में व्यापक रूप से उपयोग होता है, विशेषकर Kubernetes, Docker, और Ansible जैसे टूल्स में।
इसके अलावा, YAML JSON का सुपरसैट है, यानी वैध JSON फाइलों को YAML के रूप में पार्स किया जा सकता है। YAML फाइलों में आम तौर पर .yaml या .yml एक्सटेंशन होता है।
आप YAML के बारे में उसके वेबसाइट पर भी और जान सकते हैं!
YAML का सिंटैक्स और संरचना
इस सेक्शन में हम YAML सिंटैक्स के बुनियादी सिद्धांतों का अन्वेषण करेंगे, जिनमें की-वैल्यू पेयर्स, लिस्ट, नेस्टेड डेटा, और कमेंट्स शामिल हैं।
बेसिक सिंटैक्स नियम
YAML के कुछ बुनियादी सिंटैक्टिक नियम इस प्रकार हैं:
- स्पेस इंडेंटेशन संरचना को दर्शाता है, इसलिए टैब से बचें!
- की-वैल्यू पेयर्स
key: valueसंरचना का अनुसरण करते हैं, अन्य भाषाओं के समान। - लाइनों की शुरुआत में हाइफ़न का उपयोग करने से एक सूची दर्शित होती है।
#का उपयोग करने से कमेंट लाइन्स बनती हैं।
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
की-वैल्यू पेयर्स
YAML डेटा को की-वैल्यू पेयर्स के रूप में दर्शाता है, जो Python में डिक्शनरी के समान है। यह अक्सर विभिन्न कॉन्फ़िगरेशन फाइलों और सेटिंग्स को दी गई जानकारी को दर्शाता है। स्ट्रिंग्स या की को कोट्स से दर्शाने की आवश्यकता नहीं है; बस आवश्यक की और वैल्यू लिखें:
location: New York
country: USA
security-level: user
YAML में लिस्ट
लिस्ट को हाइफ़न (-) का उपयोग करके दर्शाया जाता है। इससे आप एक ही की के अंतर्गत कई ऑब्जेक्ट्स सूचीबद्ध कर सकते हैं। मार्कअप एडिटर्स में पढ़ते समय यह अक्सर विजुअली बुलेट्स की तरह दिखता है।
fruits:
- Apple
- Banana
- Cherry
नेस्टेड डेटा
नेस्टेड स्ट्रक्चर इंडेंटेशन का उपयोग करके पदानुक्रमित डेटा प्रतिनिधित्व की अनुमति देते हैं। इन्हें नेस्टेड डिक्शनरी की तरह समझें। इंडेंटेशन का उपयोग करके, आप दर्शाते हैं कि कौन-सी की अन्य की के सबसेट हैं।
person:
name: Alice
details:
age: 25
city: London
कमेंट्स
कमेंट्स # से शुरू होते हैं और YAML पार्सर उन्हें अनदेखा करते हैं। ये सिंगल-लाइन कमेंट्स होते हैं।
# This is a comment
username: admin
password: secret
एडवांस्ड YAML फीचर्स
YAML में मल्टी-लाइन स्ट्रिंग्स, डेटा टाइप्स और एंकर जैसी शक्तिशाली विशेषताएँ शामिल हैं जो दस्तावेज़ों को अधिक प्रभावी और संरचित बनाती हैं। इस सेक्शन में, हम इन क्षमताओं का व्यावहारिक उदाहरणों के साथ अन्वेषण करेंगे।
मल्टी-लाइन स्ट्रिंग्स
YAML | (लिटरल ब्लॉक) या > (फोल्डेड ब्लॉक) का उपयोग करके मल्टी-लाइन स्ट्रिंग्स का समर्थन करता है।
|लिटरल ब्लॉक प्रत्येक लाइन ब्रेक के लिए एक नया लाइन\nबनाता है।>फोल्डेड ब्लॉक केवल लगातार लाइन ब्रेक्स पर नया लाइन बनाता है।
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
ऊपर की बात आउटपुट दिखाने पर बेहतर समझ आती है।
|(लिटरल ब्लॉक) के लिए:
This is a
multi-line string.
>(फोल्डेड ब्लॉक) के लिए:
This is another multi-line string.
YAML में डेटा प्रकार
YAML विभिन्न डेटा प्रकारों का समर्थन करता है, जिनमें स्ट्रिंग्स, नंबर, बूलियन और null वैल्यूज़ शामिल हैं। यह फॉर्मैटिंग के आधार पर टाइप को स्वतः पहचान लेता है, परंतु स्पष्ट टाइप परिभाषाएँ भी अनुमति देता है।
निम्न उदाहरण YAML में बेसिक डेटा टाइप्स के उपयोग को दिखाता है:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML आवश्यक होने पर !!type का उपयोग करके स्पष्ट टाइप डिक्लेरेशन की अनुमति देता है:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
चूँकि YAML का अक्सर संरचित डेटा के लिए उपयोग होता है, यह समर्थन करता है:
- लिस्ट (सीक्वेंस):
fruits:
- Apple
- Banana
- Cherry
- डिक्शनरी (मैपिंग्स):
person:
name: Alice
age: 30
is_student: false
एंकर और एलियस
YAML आपको एंकर (&) का उपयोग करके पुन: प्रयोज्य वैल्यू परिभाषित करने और बाद में एलियस (*) से उन्हें संदर्भित करने की अनुमति देता है। यह कॉन्फ़िगरेशन फाइलों में अनावश्यक दोहराव को कम करता है, जिससे वे अधिक साफ़ और बनाए रखने में आसान हो जाती हैं।
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
<<: सिंटैक्स एक एंकर से की-वैल्यू पेयर्स को किसी अन्य मैपिंग में मर्ज करने की अनुमति देता है। यदि कोई की दोनों में मौजूद है, तो नई वैल्यू मूल वैल्यू को ओवरराइड कर देती है।
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
यह अंतिम रिज़ॉल्व्ड संरचना है:
server1:
retries: 3
timeout: 30
host: example.com
एंकर और एलियस विशेष रूप से बड़े कॉन्फ़िगरेशन फाइलों में उपयोगी होते हैं, जहाँ मानों को बार-बार दोहराना अक्षम होगा। ये YAML फाइलों को DRY (Don't Repeat Yourself) बनाए रखते हैं और अपडेट्स को आसान बनाते हैं।
YAML के सामान्य उपयोग के मामले
YAML सॉफ़्टवेयर डेवलपमेंट, इंफ्रास्ट्रक्चर ऑटोमेशन और API प्रबंधन में व्यापक रूप से उपयोग होता है। इसका मानव-पठनीय सिंटैक्स इसे कॉन्फ़िगरेशन फाइल्स, डेटा सीरियलाइज़ेशन, और Infrastructure as Code (IaC) के लिए पसंदीदा फ़ॉर्मेट बनाता है। आइए इसके सबसे आम अनुप्रयोगों का अन्वेषण करें।
कॉन्फ़िगरेशन फाइल्स
YAML व्यापक रूप से Docker Compose, Kubernetes और जैसी CI/CD पाइपलाइंस अप्लिकेशंस में कॉन्फ़िगरेशन के लिए उपयोग होता है। इसकी समझने में आसानी के कारण कोई भी Docker YAML सेट-अप फाइल्स को उठाकर आसानी से समझ सकता है कि क्या हो रहा है।
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
YAML की पठनीयता और एंकर व एलियस का समर्थन दोहराव को कम करने में मदद करता है, जिससे यह JSON या XML की तुलना में अधिक संरक्षित करने योग्य बनता है।
Docker में YAML और उसके उपयोग के बारे में अधिक जानें इस इंटरमीडिएट Docker कोर्स में।
डेटा सीरियलाइज़ेशन और ट्रांसफर
YAML का उपयोग APIs और कॉन्फ़िगरेशन मैनेजमेंट टूल्स के लिए डेटा को सीरियलाइज़ करने में होता है—जटिल डेटा संरचनाओं को मानव-पठनीय फ़ॉर्मेट में बदलकर जिसे मशीनें आसानी से पार्स कर सकें।
उदाहरण के लिए, YAML में फ़ॉर्मैट किया गया एक API रिक्वेस्ट बॉडी:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
YAML की इंडेंटेशन-आधारित संरचना अनावश्यक सिंटैक्स को हटा देती है, जिससे यह JSON की तुलना में हल्का, पढ़ने में आसान, और संशोधित करने में सरल हो जाता है।
Infrastructure as Code (IaC)
Ansible और Kubernetes जैसे कॉन्फ़िगरेशन मैनेजमेंट टूल्स सिस्टम स्टेट्स को परिभाषित करने, प्रक्रियाओं को स्वचालित करने और वातावरणों में स्थिरता सुनिश्चित करने के लिए YAML का लाभ उठाते हैं।
- Ansible में, YAML का उपयोग प्लेबुक्स लिखने के लिए होता है जो सिस्टम स्टेट्स, टास्क्स और डिपेंडेंसीज़ को परिभाषित करते हैं, यह सुनिश्चित करते हुए कि इंफ्रास्ट्रक्चर कॉम्पोनेंट्स सुसंगत रूप से कॉन्फ़िगर हों।
- Kubernetes YAML मैनिफेस्ट्स का उपयोग पॉड्स, सर्विसेज़ और डिप्लॉयमेंट्स जैसी संसाधनों को परिभाषित करने के लिए करता है, जिससे कंटेनराइज़्ड एप्लिकेशंस का स्वचालित ऑर्केस्ट्रेशन संभव होता है।
यहाँ Kubernetes Pod कॉन्फ़िगरेशन का एक उदाहरण है:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
Kubernetes में YAML का उपयोग कैसे होता है, यह इस Introduction to Kubernetes कोर्स में जानें।
API डाक्यूमेंटेशन
जैसी API स्पेसिफिकेशंस OpenAPI और Swagger YAML का उपयोग एंडपॉइंट्स और डेटा स्ट्रक्चर्स को आसानी से पढ़े जाने योग्य तरीके से परिभाषित करने के लिए करती हैं। YAML का उपयोग API मेथड्स, रिक्वेस्ट पैरामीटर्स, रिस्पॉन्स फ़ॉर्मैट्स और ऑथेंटिकेशन मेथड्स को रेखांकित करने में होता है।
यहाँ YAML में एक OpenAPI स्पेसिफिकेशन का उदाहरण है:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
उदाहरण के लिए, OpenAPI स्पेसिफिकेशंस RESTful APIs को डाक्यूमेंट करने के लिए YAML का उपयोग करते हैं। यह उन्हें क्लाइंट SDKs, इंटरेक्टिव API डाक्यूमेंटेशन, और ऑटोमेटेड टेस्टिंग बनाने के लिए एक स्पष्ट ब्लूप्रिंट प्रदान करने में सक्षम बनाता है। यह संरचित फ़ॉर्मेट API इम्प्लीमेंटेशंस में स्थिरता सुनिश्चित करता है।
YAML फाइल्स के साथ काम करना
YAML का व्यापक उपयोग कॉन्फ़िगरेशन फाइल्स, ऑटोमेशन और डेटा सीरियलाइज़ेशन के लिए होता है, लेकिन चूँकि यह इंडेंटेशन पर निर्भर करता है, उचित फॉर्मैटिंग अत्यंत आवश्यक है। यहाँ बताया गया है कि आप YAML को प्रभावी ढंग से कैसे पढ़ें, लिखें, वैलिडेट और एडिट करें।
Python में YAML पढ़ना और लिखना
Python की PyYAML लाइब्रेरी YAML को पार्स और जेनरेट कर सकती है।
मान लीजिए आपके पास निम्न कॉन्फ़िगरेशन YAML फाइल है:
database:
host: localhost
port: 5432
user: admin
password: secret
Python में आप अपने कॉन्फ़िगरेशन फाइल के साथ इस प्रकार काम कर सकते हैं:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
यदि आप Python में JSON डेटा के साथ काम करने में रुचि रखते हैं, तो यह सार्वांगीण Python JSON ट्यूटोरियल देखें।
YAML फाइल्स का वैलिडेशन
सही संरचना सुनिश्चित करने के लिए, आप ऐसे टूल्स का उपयोग कर सकते हैं जो स्पेसेज़ की जगह टैब्स, दोहराए गए कैरेक्टर्स, सिंटैक्स समस्याएँ, और ट्रेलिंग स्पेसेज़ जैसी दिक्कतों की जाँच करें।
ये कुछ लोकप्रिय YAML वेलिडेटर्स हैं:
- CLI टूल: yamllint (Python-आधारित लिंटर)
- ऑनलाइन वेलिडेटर्स: YAML Lint, JSON Formatter का YAML Validator
YAML एडिट करना
आप किसी भी टेक्स्ट एडिटर में YAML लिख और एडिट कर सकते हैं, लेकिन लिंटिंग टूल्स और सिंटैक्स हाइलाइटिंग पठनीयता बढ़ाते हैं।
मेरे कुछ पसंदीदा एडिटर्स:
- VS Code (YAML प्लगइन्स के साथ)
- PyCharm (बिल्ट-इन सपोर्ट)
- Sublime Text (YAML सिंटैक्स हाइलाइटिंग के साथ)
YAML में आम गलतियाँ जिनसे बचना चाहिए
इसकी सादगी के बावजूद, YAML के साथ काम करते समय समस्याएँ और टाइपो आसानी से हो सकते हैं। यह सेक्शन इन गलतियों पर चर्चा करता है और साफ़-सुथरी व सही फाइलें लिखने के लिए सर्वोत्तम प्रथाएँ प्रदान करता है। इसी कारण मैं लिंटर या टेक्स्ट एडिटर का उपयोग करने की सलाह देता हूँ!
टैब्स और स्पेसेज़ मिलाना
YAML इंडेंटेशन के लिए स्पेसेज़ पर निर्भर करता है—कभी भी स्पेसेज़ और टैब्स को न मिलाएँ। टैब्स आपकी YAML स्क्रिप्ट को तोड़ देंगे। यह वास्तव में एक सोच-समझकर लिया गया निर्णय है, क्योंकि अलग-अलग सिस्टम टैब्स को अलग तरह से पढ़ते हैं, और प्रभाव को कम करने के लिए स्पेसेज़ पसंद किए जाते हैं।
गलत इंडेंटेशन
पार्सिंग एरर से बचने के लिए सुसंगत इंडेंटेशन सुनिश्चित करें। चूँकि इंडेंटेशन YAML में पदानुक्रम दर्शाने की एकमात्र विधि है, गलत पार्सिंग आपके कोड में समस्याएँ पैदा कर सकती है। आप आसानी से किसी key: value पेयर को गलत जगह पर धकेल सकते हैं, इसलिए इंडेंटेशन पर ध्यान रखें!
स्पेशल कैरेक्टर्स के लिए कोट्स भूल जाना
ऐसी स्ट्रिंग्स के लिए कोट्स का उपयोग करें जिनमें स्पेशल कैरेक्टर्स या स्पेसेज़ हों। बैकस्लैश, कॉमा, विस्मयादिबोधक चिह्न जैसे तत्वों को स्ट्रिंग के रूप में पढ़ने हेतु कोट्स की आवश्यकता होती है।
path: "/home/user/documents"
message: "Hello, World!"
उचित वैलिडेशन, संरचित एडिटिंग, और Python की PyYAML का उपयोग करके, आप YAML फाइलों के साथ प्रभावी ढंग से काम कर सकते हैं और आम गलतियों से बच सकते हैं।
निष्कर्ष
YAML एक शक्तिशाली फिर भी सरल फ़ॉर्मेट है जिसका व्यापक उपयोग कॉन्फ़िगरेशन, डेटा सीरियलाइज़ेशन और इंफ्रास्ट्रक्चर ऑटोमेशन में होता है। इसके सिंटैक्स, संरचना और सर्वोत्तम प्रथाओं को समझकर आप विभिन्न एप्लिकेशंस में YAML के साथ कुशलता से काम कर सकते हैं।
यदि आप वास्तविक दुनिया के परिदृश्यों में YAML लागू करने में रुचि रखते हैं:
- जानें कि CI/CD वर्कफ़्लोज़ में YAML कैसे उपयोग होता है, इस CI/CD for Machine Learning कोर्स के साथ।
- एक्सप्लोर करें कि APIs अपनी स्पेसिफिकेशंस में YAML का कैसे उपयोग करते हैं, इस Introduction to APIs in Python कोर्स में।
- कंटेनराइज़ेशन और इंफ्रास्ट्रक्चर ऑटोमेशन में गहराई से जाएँ, इस Containerization and Virtualization ट्रैक में।
FAQs
क्या YAML सार्वभौमिक है?
जब तक डेटा स्रोत या टार्गेट YAML पढ़ सकता है, यह डेटा को सीरियलाइज़ और ट्रांसपोर्ट करने की एक व्यवहार्य और उपयोगी विधि है। सुनिश्चित करें कि आप डेटा ऐसे टार्गेट को भेज रहे हैं जो YAML प्रोसेस कर सके।
क्या YAML सुरक्षित है? क्या YAML फाइलें सुरक्षा जोखिम पैदा कर सकती हैं?
YAML स्वयं केवल एक डेटा फ़ॉर्मेट है, लेकिन अविश्वसनीय YAML फाइलों को पार्स करते समय सुरक्षा जोखिम उत्पन्न हो सकते हैं। Python की PyYAML में डिफ़ॉल्ट yaml.load() विधि YAML में एम्बेडेड मनमाना कोड निष्पादित कर सकती है, जो जोखिमपूर्ण है। इसके बजाय, हमेशा yaml.safe_load() का उपयोग करें ताकि हानिकारक कोड के अनचाहे निष्पादन को रोका जा सके। इसी तरह, एप्लिकेशंस में YAML का उपयोग करते समय, सुरक्षा खामियों से बचने के लिए सख्त स्कीमा वेलिडेशन सुनिश्चित करें।
क्या YAML पर्यावरण वेरिएबल्स का समर्थन करता है?
हाँ! जबकि YAML स्वयं पर्यावरण वेरिएबल्स को सीधे प्रोसेस नहीं करता, कई टूल्स (जैसे Docker Compose और Kubernetes) YAML फाइलों के भीतर पर्यावरण वेरिएबल्स को संदर्भित करने की अनुमति देते हैं।
YAML में कमेंट्स को कैसे हैंडल करते हैं?
YAML # चिन्ह का उपयोग करके सिंगल-लाइन कमेंट्स का समर्थन करता है, लेकिन मल्टी-लाइन कमेंट्स का समर्थन नहीं करता। यदि आपको मल्टी-लाइन कमेंट्स की आवश्यकता है, तो एक सामान्य वर्कअराउंड _comment जैसे डमी की का उपयोग करना है। हालाँकि, यह केवल एक कन्वेंशन है और YAML पार्सर इसे अनदेखा नहीं करेंगे जब तक कि आपका एप्लिकेशन विशेष रूप से इसे फ़िल्टर न करे।