从RESTful Web服务递归下载资源

乔·李·莫耶

我想从RESTful HTTP端点递归下载JSON资源,并将它们存储在本地目录结构中,然后以包含HTTP URL的JSON字符串的形式链接到相关资源。Wget似乎是完成这项工作的一种工具,尽管它的递归下载显然仅限于HTML超链接和CSS url()引用。

有问题的资源扬鞭文档文件类似于这一个,但在我的情况下,所有的URL都是绝对的。Swagger模式非常复杂,但是只要跟随看起来像绝对HTTP(S)URL的任何字符串就足够了。更好的做法是遵循“路径”属性中指定的绝对或相对路径。

谁能建议一个通用的递归搜寻器来实现我在这里想要的功能,或者用一种轻量级的方式编写wget或类似脚本来实现它?

乔·李·莫耶

我最终写了一个shell脚本来解决这个问题:

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从索引文件中提取API路径,并在下载JSON时对其进行漂亮打印。正如webron提到的那样,这也许只会让仍在使用1.x Swagger模式的人们感兴趣,尽管我看到自己将来会针对其他问题修改此脚本。

我为Swagger找到的一个问题是,我们的API文档中的条目顺序显然不稳定。针对我们的API文档(由swagger-springmvc生成)连续多次运行脚本会导致属性顺序发生微小变化。通过使用jq的--sort-keys选项对JSON对象的属性键进行排序,可以部分解决此问题,但这并不涵盖所有情况,例如模型模式的required属性是字符串属性名称的简单数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章