Req–一种HTTP脚本语言

2022-03-02 23:29:35

编程语言总是让我着迷,它们是如何';重新设计,他们如何';重新实施,以及如何实施';重复使用。他们是否';是DSL(领域特定语言)或更多的通用编程语言。编程语言一直是我想尝试创造的东西,即使它最终很糟糕,或者没有真正的用处,但只是为了学习。嗯,在圣诞节假期期间,我决定花时间开发一种语言,它小巧简单,专为我遇到但尚未遇到的特定用例而设计';我没有找到解决问题的办法。我最终开发的语言是req,一种专门为HTTP脚本设计的语言。

我说HTTP脚本是什么意思?也许最好举个例子,然后解释一下,

Token=env";GH#U代币";;标题=(授权N:";持票人$(代币)";,);Resp=GET";https://api.github.com/user" $标题->;邮寄如果是$Resp。StatusCode==200{User=decode json$Resp.Body;writeln";Hello$(User[";login";])";}

以上就是req的样子。它看起来像是您的典型语言,但是它为发出HTTP请求和处理响应提供了一流的支持。该语言使用内置命令来处理请求的发送、数据的编码/解码以及数据的读取/写入。这些命令还返回可以存储在变量中的值。一个命令的输出可以通过->;操作人员不支持用户定义的命令。

上面的例子使用了GH_TOKEN环境变量,所以如果我们想让它实际运行,我们需要确保在调用之前,

所以,从一个简短的概述中,你可以看到,人们对其他语言有一些熟悉。我把它称为脚本语言,而不是程序语言,因为它是被解释的,并且在范围和功能上非常有限。

req也可以通过REPL使用,只需调用二进制文件,不向其传递任何参数即可访问REPL。这可以用作草稿行,以规划您希望脚本执行的操作,也可以用作探索HTTP服务及其端点的方法,

$REQUEQ devel a5ddbe7周六1月29日11:34:38 2022+0000>;Resp=GET";https://httpbin.org/json" ->;发送>;writeln$RespHTTP/2.0 200 OK访问控制允许凭据:trueAccess Control允许来源:*内容长度:429内容类型:应用程序/jsonDate:Sat,2月26日2022年2 2 2 2 14:14:14:56 GMT服务器:Guniicorn/19.9.0{#34;幻灯片和34;::\#;34;34;作者和作者;作者;作者和作者;34;作者和34;34;你的真诚的;你的真实的你的;你的真实的;你的;你的真实的;你的;你的真实的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的;你的日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;日期;34;34;34;34;34;34;34#34;类型";:";全部";},{";物品";:[";为什么<;em>;WonderWidgets<;/em>;很棒";,";谁<;em>;购买<;/em>;WonderWidgets>;]"标题";:"概述""类型";:"全部";}]"标题";:"幻灯片示例";}

第一个是为了学习。不久前,我收到了用围棋写翻译和用围棋写编译器的书的副本。我在2020年初读完了第一本书,很享受我所学到的,想把我所学到的付诸实践。然而,当时我不能';I don’我想不出一门有趣有趣的语言,我想发展它,所以我把它的前景搁置了一段时间,这就引出了我的第二个原因。。。

我认为大多数开发人员必须在日常工作中的某个时间点与HTTP服务进行交互,这需要某种形式的脚本。也许你';我们正试图调试一个API,所以打开一个终端,发出几个curl请求,看看会有什么响应。或者你想从一个网站上获取信息。不管怎样,你';我们正在做一些需要修补的事情。

我也去过那里。正是这种情况让我想知道,是否有一种工具能够以编程的方式轻松处理HTTP请求及其响应。当然,您可以使用curl和shell脚本,并通过sed、awk和jq来处理数据,以获得所需的数据,但这种方法可能很脆弱。另一方面,您可以使用成熟的编程语言。这样,您将拥有更多的控制权,但如果您只想发送一个HTTPrequest,那么有时可能会有点过于冗长。

这是促使我在req上开发的。一种高级脚本语言,允许您轻松发送HTTP请求,并处理它们的响应。在我看来,这种语言的主要好处是,它试图使与HTTP请求的工作尽可能具有语义,具体如下:,

这里我们想向https://httpbin.org/json终点。例如,在脚本或REPL中写出来比在使用curl时写出来更自然。然后让';假设我们想把响应数据解码成JSON,

同样,它';就像我们';重新描述我们想对回复做什么。这就是我想用这种语言实现的目标,将其限制在有限的范围内,并希望在HTTP脚本领域提供一些实用程序。

我';我在这篇文章中简单介绍了这门语言,以及它背后的原因#39;它的实施。我没有';I don’我没有解释语言是如何设计的,但这可能是另一篇文章。如果我';到目前为止,我已经向您展示了您的兴趣,然后可以在GitHub上随意查看它的代码:https://github.com/andrewpillar/req也可以随意翻阅那里的文档,了解语言。