2014-10-20 7 views
5

से संसाधनों को रिकर्सली डाउनलोड करें मैं एक विश्वसनीय HTTP एंडपॉइंट से JSON संसाधनों को रिकर्सिव रूप से डाउनलोड करना चाहता हूं और HTTP URL वाले JSON स्ट्रिंग्स के रूप में संबंधित संसाधनों के लिंक के बाद स्थानीय निर्देशिका संरचना में संग्रहीत करना चाहता हूं। Wget नौकरी के लिए एक संभावित उपकरण प्रतीत होता है, हालांकि इसके रिकर्सिव डाउनलोड स्पष्ट रूप से एचटीएमएल हाइपरलिंक्स और सीएसएस यूआरएल() संदर्भों तक ही सीमित है।रीस्टफुल वेब सेवा

प्रश्न में संसाधन Swagger प्रलेखन फ़ाइलें this one के समान हैं, हालांकि मेरे मामलों में सभी यूआरएल पूर्ण हैं। स्वैगर स्कीमा काफी जटिल है, लेकिन यह किसी भी स्ट्रिंग का पालन करने के लिए पर्याप्त होगा जो एक पूर्ण HTTP (एस) यूआरएल जैसा दिखता है। 'पथ' गुणों में निर्दिष्ट पूर्ण या सापेक्ष पथों का पालन करना बेहतर होगा।

क्या कोई भी सामान्य प्रयोजन रिकर्सिव क्रॉलर सुझा सकता है जो मैं यहां जो चाहता हूं, या स्क्रिप्टिंग wget का हल्का तरीका या इसे प्राप्त करने के समान ही कर सकता हूं?

API_ROOT_URL="http://petstore.swagger.wordnik.com/api/api-docs" 
OUT_DIR=`pwd` 

function download_json { 
    echo "Downloading $1 to $OUT_DIR$2.json" 
    curl -sS $1 | jq . > $OUT_DIR$2.json 
} 

download_json $API_ROOT_URL /api-index 

jq -r .apis[].path $OUT_DIR/api-index.json | while read -r API_PATH; do 
    API_PATH=${API_PATH#$API_ROOT_URL} 
    download_json $API_ROOT_URL$API_PATH $API_PATH 
done 

यह jq का उपयोग करता है अनुक्रमणिका फ़ाइल से एपीआई रास्तों को निकालने के लिए, और भी बहुत JSON मुद्रित करने के लिए के रूप में यह डाउनलोड किया जाता है:

+0

यदि कोई उत्सुक है, तो मैं समय के साथ हमारे इन-डेवलपमेंट एपीआई के परिवर्तनों को ट्रैक करने के लिए ऐसा करने की कोशिश कर रहा हूं - रिलीज से पहले हम पिछले रिलीज से स्नैपशॉट के साथ वर्तमान दस्तावेज को अलग करने में सक्षम होंगे। – yjo

+0

आप जो भी पूछते हैं उसे करने का कोई तरीका सुझा नहीं सकते हैं, लेकिन सामान्य जानकारी के लिए, स्वैगर 2.0 आम तौर पर मल्टी-पेज वन की बजाय एक पृष्ठ की घोषणा है (यह * आवश्यक हो तो बहु पृष्ठ हो सकता है) तो diffs आसान होगा । – Ron

+0

@webron - ऐसा लगता है कि यह एक सुधार होगा! दुर्भाग्य से हमारे swagger दस्तावेज़ अर्द्ध स्वचालित रूप से उत्पन्न होते हैं ([swagger-springmvc] के साथ (https://github.com/martypitt/swagger-springmvc)) और मुझे नहीं लगता कि स्वैगर v2.0 आउटपुट एक विकल्प है। – yjo

उत्तर

4

मैं समस्या को हल करने के लिए एक खोल स्क्रिप्ट लिख समाप्त हो गया। webron का उल्लेख है कि यह शायद 1.x स्वैगर स्कीमा का उपयोग करने वाले लोगों के लिए केवल रुचि का होगा, हालांकि मैं भविष्य में अन्य समस्याओं के लिए खुद को इस स्क्रिप्ट को अनुकूलित कर सकता हूं।

स्वैगर के लिए मुझे यह समस्या मिली है कि हमारे एपीआई दस्तावेज़ों में प्रविष्टियों का क्रम स्पष्ट रूप से स्थिर नहीं है। हमारे एपीआई दस्तावेज़ों (swagger-springmvc द्वारा उत्पन्न) के खिलाफ लगातार कई बार स्क्रिप्ट चलाना परिणामस्वरूप संपत्ति आदेशों में मामूली परिवर्तन होता है। इसे JSON ऑब्जेक्ट्स 'प्रॉपर्टी कुंजियों को jq के --sort-keys विकल्प के साथ क्रमबद्ध करके आंशिक रूप से तय किया जा सकता है, लेकिन इसमें सभी मामलों को शामिल नहीं किया गया है, उदा। एक मॉडल स्कीमा की required संपत्ति जो स्ट्रिंग संपत्ति नामों की एक सादा सरणी है।

संबंधित मुद्दे