非程序员,现在要通过一个 API 接口去实现一些操作,请教各位大佬如何在终端(Terminal)里面用类似命令行的操作来实现?

2018-10-28 00:28:24 +08:00
 qceytzn

本人不会写代码,但是电脑和网络都还玩的比较 6,能比较熟练的用 linux 的命令行解决一些问题,现在要实现的操作是跟金融交易有关的,为金融安全考虑我就不放那个公司的链接了,简单来说:

那家公司提供了 REST API,使用 HTTPS response codes 返回 JSON Object 作为应答,他们直接提供了 Java、cURL、ruby、python、javascript、php、json 等几种示例代码,我的主要操作系统是 linux,虚拟机里也有一个 Embedded win 7 作辅佐使用,我想在选定以上某一种语言之后在操作系统上安装好此语言的库然后在终端(就是那个默认是黑乎乎的命令行操作界面)里面操作,不求多快多自动化,只求能完全弄懂各个操作的逻辑然后把官方的示例代码里的关键参数修改成我要的然后做成批处理文件或者定义文件再投入使用就可以了,主要就是查询账户状态、新建一个目标、发送订单这三种操作,基于这个目标,下面几个问题请大佬们给点意见:

1,Java、cURL、ruby、python、javascript、php、json 这几种语言,哪种对初学者更友好?我翻看了一下同一个操作下不同语言的示例代码,似乎 php 让我感觉更舒服一点(更舒服的意思是”感觉能看懂代码是啥意思的比例比其他语言的要高“),这不是错觉吧?

2,我想要实现的操作方式(就当是类似一键脚本的那种傻瓜式操作吧)哪种语言更适合?我就知道在命令行里运行 java xxxxxx.jar 和 php xxxxx.php ,其他几种语言根本没有过实际操作,php 文件好像直接打开记事本就能写,jar 文件是需要编译才能得到吗?

3,如果(以我自身的能力)不能实现交互式的一键脚本那种操作的话,那就把每个单独的操作做成独立的定义文件,我按顺序一个一个运行也行,重点是能尽快投入使用,请大佬们给点意见,不胜感激!

2855 次点击
所在节点    程序员
22 条回复
iwtbauh
2018-10-28 01:22:46 +08:00
“能比较熟练的用 linux 的命令行解决一些问题”

那么 shell 应该会写吧,curl 应该会用吧,用它们完全能解决问题,这是不学习新知识的做法

shell 解析 json,可以用 jq 和 jshon (你觉得哪个好用用哪个)
CEBBCAT
2018-10-28 01:33:03 +08:00
重述一下楼主的需求:
有一 REST API 提供了 Java、cURL、ruby、python、javascript、php、( json ?)的示例代码,可他们我都不会,我就会 Linux 的 Shell,该怎么写个 Linux 的 Shell 小程序使用这个 API 呢?

解决方案:同楼上,curl。学学 shell 脚本怎么写就行了,但小心关键 token 被获取
qceytzn
2018-10-28 02:37:24 +08:00
@iwtbauh
@CEBBCAT

Linux 的 shell 真不会,从来没写过,好几年前还在用 windows 的时候写过非常简单的批处理文件(.bat 文件,简单到我都不好意思说)

话说 curl 也是很少用,我现在用的 debian 9 默认都没装,不多的使用经历都是在设置 VPS 的时候碰上的,基本上就是复制网上看到的命令到 vps 里执行而已。这会儿我已经在系统里安装好了 curl,不过我又发现了新问题:示例代码里面,就 curl 和 json 的代码最少,好多部分根本就没有相关的代码,比如 Authentication 这个环节,Java、ruby、python、javascript、php 都有大段的代码,而 curl 和 json 的相关示例代码为 0,我是不是理解错了啥?
whileFalse
2018-10-28 03:53:07 +08:00
既然有示例代码就直接改啊。
要不你可以看看有没有能生成代码的 API 调试工具。Mac 的 paw 这个 app 可以做到。
yuikns
2018-10-28 08:25:53 +08:00
要是有一 restapi 的 demo 简单啊,可以先 postman 上调,完了它可以复制出各种代码,再改改就好。其中 curl 命令也在选项中
renzhe8102
2018-10-28 08:44:32 +08:00
httpie
aborigine
2018-10-28 09:15:03 +08:00
如果要终端直接运行,那还是 curl 简单吧
adminii
2018-10-28 12:47:50 +08:00
熟悉脚本类的,学 python 吧
iwtbauh
2018-10-28 13:02:39 +08:00
@qceytzn #3

不需要示例,直接看 HTTP API 接口的文档然后组织 shell 代码,比如有个接口获取 abc 信息

GET /xxx/abc

要求传一个 token 的 header。你就

curl -s "${addr}/xxx/abc" -H "Token: ${token}"
ceyes
2018-10-28 13:39:56 +08:00
cURL 不是一语言,就是你要的 Terminal 里的命令。
qceytzn
2018-10-28 14:27:50 +08:00
@whileFalse
@yuikns
@renzhe8102
@aborigine
@adminii
@iwtbauh
@ceyes

诸位大佬,你们说的 paw、postman、httpie 我都不太懂.....

我贴一段 php 代码出来,您们帮忙看看怎么跑起来最方便:

<?php
function make_authenticated_request($endpoint, $method, $body) {
$url = 'https://api.xxxxxxxxx.com';
$api_key = "njkdfy89275yeklfjksudy80237hdgoi";
$secret_key = "e9tuidkljg904utkngbnnf894utiejgdoiug";

$timestamp = floor(microtime(true)*1000);
$request_url = $url . $endpoint;

if(strpos($request_url,"?"))
$request_url .= '&timestamp=' . $timestamp;
else
$request_url .= '?timestamp=' . $timestamp;

if(!empty($body))
$body = json_encode($body, JSON_FORCE_OBJECT);
else
$body = '';

$headers = array(
"Content-Type: application/json",
"X-Api-Key: ". $api_key,
"X-Api-Signature: ". calc_auth_sig_hash($secret_key, $request_url . $body),
"X-Api-Version: 2"
);
$curl = curl_init();

if($method=="POST"){
$options = array(
CURLOPT_URL => $request_url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_RETURNTRANSFER => true);
}else {
$options = array(
CURLOPT_URL => $request_url,
CURLOPT_RETURNTRANSFER => true);
}
curl_setopt_array($curl, $options);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);
return json_decode($result, true);
}

function calc_auth_sig_hash($seckey, $val) {
$hash = hash_hmac('sha256', $val, $seckey);
return $hash;
}

echo make_authenticated_request("/account", "GET", array());
$transfer = array(
"source"=>"here",
"dest"=>"sb@xxxxxxxx.com",
"destAmount"=> 99,
"dest"=>"there",
"message"=> "bottle"
);
echo make_authenticated_request("/transfers", "POST", $transfer);
?>
Rsplwe
2018-10-28 17:51:58 +08:00
@qceytzn php 获取命令行参数
yuikns
2018-10-28 21:48:32 +08:00
postman 是个图形化构造 http request 的工具

https://www.getpostman.com

google 第一行就是

httpie 在 Google 第一行也有介绍,我看不出有啥弄不懂的

这和程序没有任何关系,也能说网络很 6 ?...
qceytzn
2018-10-28 21:55:40 +08:00
@yuikns 又 6 又懒,不可以吗?没有立竿见影的效果时我是拒绝去学习新东西的
不过还是谢谢你的回复,一句话让我知道了 postman 是干嘛的
qceytzn
2018-10-28 21:57:59 +08:00
@Rsplwe 把上面那段代码里的关键参数修改成我自己的然后保存为 php 文件最后终端里运行 php xxxxxx.php 是不是就可以了?
zilan
2018-10-28 22:02:20 +08:00
我很 6
我很懒
干嘛不直接说我是伸手党
qceytzn
2018-10-28 23:15:04 +08:00
@zilan 这你就错了,我现在是处于要弄清一些有关操作 api 的基本概念的阶段,也就是因为完全没有编程的基础,所以我只想从我已经有点了解的东西上下手,比如一开始有人提到的 curl,立刻安装尝试,而其他完全没有听过的东西在这个时候乍一冒出来我是有点蒙的,是去研究新东西还是尽量把已经接触过的东西弄通弄上手??很明显我的选择是后者

我承认我很懒,但是我的懒是有品味有原则的,就像这会儿我打这么多字给你看,其实我可以什么都不说,闷声大发财,这是最好的,但是吧,想到你的发言可能会影响某个或某几个准备给我有用建议的大佬,我一句话不说也不好,你以后要记住:“请尽量让自己的回复能够对别人有帮助”。
leoleoasd
2018-10-28 23:42:18 +08:00
建议用 php 或 python
php 对新手更友好

curl 和 postman 都很不方便 (因为这个需要计算签名)
qceytzn
2018-10-28 23:52:13 +08:00
@leoleoasd 是,我也是初步定下了 php,是不是先在系统里把 php 库安装好,然后把上面那段代码里的关键参数修改成我自己的然后保存为 php 文件最后终端里运行 php xxxxxx.php 是不是就可以了?
NEETLEE
2018-10-29 09:30:46 +08:00
php 的命令行模式吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX