我们已经介绍了要讨论的API类型,现在让我们将重点转移到探索这些API上。
探索网络API
在开始使用网络API并与之交互时, 我们的重点就像迄今为止所关注的那样—与设备商无关的工具和库。更具体地说,将研究cURL和Postman等工具,以用于基于HTTP的API;以及NETCONF over SSH,用于与网络设备上的NETCONF API一起使用。 需要注意的是,这篇讲的是关于网络API的探索,因为我们展示了如何在不编写任何代码的情况下开始使用和测试网络API。重点是使用迄今为止所学的关于指定API类型的知识。不介绍您将用于自动化生产网络的工具和技术,这些类型的工具和库将在“使用网络API自动化”中介绍。 探索基于HTTP的API 我们将从基于HTTP的API开始。注意,相同的工具可以用于基于RESTful和非RESTful的HTTP API。要看的第一个工具是cURL。 cURLcURL是一个用于处理url的命令行工具。这意味着从Linux命令行,我们可以使用cURL程序发送HTTP请求。虽然cURL使用URL,但它可以使用HTTP以外的协议与服务器通信,包括FTP,SFTP,TFTP,TELNET等。您可以从Linux命令行使用mancurl命令来深入了解curl支持的所有各种选项。
我们将研究如何将cURL与Cisco ASA RESTful API结合使用。由于我们刚刚开始使用RESTful API,我们将从一个简单的HTTP GET请求开始,该请求将检索Cisco ASA安全设备的所有接口。
支持RESTful API的Cisco ASA和ASAv平台具有内置的API文档和一个用于在ASA上直接测试API的控制台。可以浏览到https:///doc/,登录,然后查看并测试asa支持的每个API。
为了进行API调用以检索接口列表及其配置,我们将使用以下示例所示的cURL语句:
$ curl -u ntc:ntc123 -k https://asav/api/interfaces/physical该语句使用两个标志并指定检索ASA上接口所需的URL。第一个标志是-u,它表示后面将出现用户名:_password_u。第二个标志是-k,它明确允许cURL执行不安全的SSL连接,在本例中需要允许在ASA上使用自签名证书。最后,我们指定要查询的资源的URL 。
$ curl -u ntc:ntc123 -k https://asav/api/interfaces/physical# response omitted
如果您发出前面的cURL语句,则会在终端上看到大字包装的输出字,难以阅读。您可以通过管道将响应传递给python -m json.tool,以漂亮地打印响应对象,使其更易于阅读。
$ curl -u ntc:ntc123 -k https://asav/api/interfaces/physical | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
100 4114 100 4114 0 0 15819 0 --:--:-- --:--:-- --:--:-- 15884
{
"kind":"collection#MgmtInterface", "selfLink":"https://asav/api/interfaces/physical", "rangeInfo":{ "offset":0, "limit":4, "total":4 }, "items":[{ "kind":"object#MgmtInterface","selfLink":"https://asav/api/interfaces/physical/Management0_API_SLASH_0", "hardwareID":"Management0/0", "interfaceDesc":"", "channelGroupID":"", "channelGroupMode":"active", "duplex":"auto", # keys removed for brevity "managementOnly":true, "mtu":1500, "name":"management", "securityLevel":0, "shutdown":false, "speed":"auto", "ipAddress":{ "kind":"StaticIP", "ip":{ "kind":"IPv4Address", "value":"10.0.0.101" }, "netMask":{ "kind":"IPv4NetMask", "value":"255.255.255.0" }
},, "objectId":"Management0_API_SLASH_0" }, { "kind":"object#GigabitInterface","selfLink":"https://asav/api/interfaces/physical/GigabitEthernet0_API_SLASH_0", "hardwareID":"G