2014-10-20 15 views
5

Tôi muốn tải xuống đệ quy các tài nguyên JSON từ một điểm cuối RESTful HTTP và lưu trữ chúng trong cấu trúc thư mục cục bộ, sau liên kết đến các tài nguyên có liên quan dưới dạng chuỗi JSON chứa URL HTTP. Wget dường như là một công cụ có khả năng cho công việc, mặc dù việc tải xuống đệ quy của nó dường như bị hạn chế đối với các siêu liên kết HTML và các tham chiếu CSS url().Tải xuống đệ quy các tài nguyên từ dịch vụ web RESTful

Tài nguyên được đề cập là Swagger các tệp tài liệu tương tự như this one, mặc dù trong trường hợp của tôi, tất cả các URL đều tuyệt đối. Giản đồ Swagger khá phức tạp, nhưng sẽ đủ để theo dõi bất kỳ chuỗi nào giống như một URL HTTP (S) tuyệt đối. Thậm chí tốt hơn là đi theo đường dẫn tuyệt đối hoặc tương đối được chỉ định trong thuộc tính 'đường dẫn'.

Có ai có thể đề xuất một trình thu thập thông dụng có mục đích chung sẽ làm những gì tôi muốn ở đây hay cách viết kịch bản nhẹ hoặc tương tự để đạt được nó?

+0

Nếu có ai đó tò mò, tôi đang cố gắng thực hiện điều này để theo dõi các thay đổi trong API phát triển của chúng tôi theo thời gian - trước khi phát hành, chúng tôi có thể tìm ra tài liệu hiện tại với ảnh chụp nhanh từ bản phát hành trước. – yjo

+0

Không thể đề xuất một cách để làm những gì bạn yêu cầu, nhưng đối với thông tin chung, Swagger 2.0 thường là một trang đơn khai báo chứ không phải nhiều trang một (nó * có thể * là nhiều trang nếu cần). . – Ron

+0

@webron - âm thanh như thế sẽ là một cải tiến! Thật không may tài liệu của chúng tôi được tạo ra bán tự động (với [swagger-springmvc] (https://github.com/martypitt/swagger-springmvc)) và tôi không nghĩ rằng đầu ra Swagger v2.0 là một lựa chọn. – yjo

Trả lời

4

tôi đã kết thúc viết một kịch bản để giải quyết vấn đề:

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 

này sử dụng jq để trích xuất các đường dẫn API từ tập tin chỉ mục, và cũng để khá in JSON vì nó được tải về. Như webron đề cập đến điều này có lẽ sẽ chỉ quan tâm đến những người vẫn đang sử dụng lược đồ Swagger 1.x, mặc dù tôi có thể thấy bản thân mình thích ứng với tập lệnh này cho các vấn đề khác trong tương lai.

Một vấn đề tôi đã tìm thấy với điều này cho Swagger là thứ tự các mục trong tài liệu API của chúng tôi dường như không ổn định. Chạy tập lệnh nhiều lần liên tiếp với tài liệu API của chúng tôi (được tạo bởi swagger-springmvc) dẫn đến những thay đổi nhỏ đối với các đơn đặt hàng thuộc tính. Điều này có thể được khắc phục một phần bằng cách sắp xếp các khóa thuộc tính của đối tượng JSON với tùy chọn --sort-keys của jq, nhưng điều này không bao gồm tất cả các trường hợp, ví dụ: thuộc tính required của lược đồ mô hình là một mảng các tên thuộc tính chuỗi đơn giản.

Các vấn đề liên quan