V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qceytzn
V2EX  ›  程序员

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

  •  
  •   qceytzn · 2018-10-28 00:28:24 +08:00 · 3018 次点击
    这是一个创建于 2228 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人不会写代码,但是电脑和网络都还玩的比较 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,如果(以我自身的能力)不能实现交互式的一键脚本那种操作的话,那就把每个单独的操作做成独立的定义文件,我按顺序一个一个运行也行,重点是能尽快投入使用,请大佬们给点意见,不胜感激!

    22 条回复    2018-10-29 17:58:52 +08:00
    iwtbauh
        1
    iwtbauh  
       2018-10-28 01:22:46 +08:00 via Android   ❤️ 1
    “能比较熟练的用 linux 的命令行解决一些问题”

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

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

    解决方案:同楼上,curl。学学 shell 脚本怎么写就行了,但小心关键 token 被获取
    qceytzn
        3
    qceytzn  
    OP
       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
        4
    whileFalse  
       2018-10-28 03:53:07 +08:00 via iPhone   ❤️ 1
    既然有示例代码就直接改啊。
    要不你可以看看有没有能生成代码的 API 调试工具。Mac 的 paw 这个 app 可以做到。
    yuikns
        5
    yuikns  
       2018-10-28 08:25:53 +08:00 via iPhone   ❤️ 1
    要是有一 restapi 的 demo 简单啊,可以先 postman 上调,完了它可以复制出各种代码,再改改就好。其中 curl 命令也在选项中
    renzhe8102
        6
    renzhe8102  
       2018-10-28 08:44:32 +08:00 via iPhone   ❤️ 1
    httpie
    aborigine
        7
    aborigine  
       2018-10-28 09:15:03 +08:00 via iPhone   ❤️ 1
    如果要终端直接运行,那还是 curl 简单吧
    adminii
        8
    adminii  
       2018-10-28 12:47:50 +08:00   ❤️ 1
    熟悉脚本类的,学 python 吧
    iwtbauh
        9
    iwtbauh  
       2018-10-28 13:02:39 +08:00 via Android   ❤️ 1
    @qceytzn #3

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

    GET /xxx/abc

    要求传一个 token 的 header。你就

    curl -s "${addr}/xxx/abc" -H "Token: ${token}"
    ceyes
        10
    ceyes  
       2018-10-28 13:39:56 +08:00
    cURL 不是一语言,就是你要的 Terminal 里的命令。
    qceytzn
        11
    qceytzn  
    OP
       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"=>"[email protected]",
    "destAmount"=> 99,
    "dest"=>"there",
    "message"=> "bottle"
    );
    echo make_authenticated_request("/transfers", "POST", $transfer);
    ?>
    Rsplwe
        12
    Rsplwe  
       2018-10-28 17:51:58 +08:00 via Android   ❤️ 1
    @qceytzn php 获取命令行参数
    yuikns
        13
    yuikns  
       2018-10-28 21:48:32 +08:00 via iPhone   ❤️ 1
    postman 是个图形化构造 http request 的工具

    https://www.getpostman.com

    google 第一行就是

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

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

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

    curl 和 postman 都很不方便 (因为这个需要计算签名)
    qceytzn
        19
    qceytzn  
    OP
       2018-10-28 23:52:13 +08:00
    @leoleoasd 是,我也是初步定下了 php,是不是先在系统里把 php 库安装好,然后把上面那段代码里的关键参数修改成我自己的然后保存为 php 文件最后终端里运行 php xxxxxx.php 是不是就可以了?
    NEETLEE
        20
    NEETLEE  
       2018-10-29 09:30:46 +08:00   ❤️ 1
    php 的命令行模式吧
    NEETLEE
        21
    NEETLEE  
       2018-10-29 09:34:45 +08:00
    不过楼主好像一点代码都没写过...如果时间不太充足还是建议找个程序猿来搞,就算是 php,写一个满足你需求的程序也要花一番功夫的。(不要小看了程序猿的工作啊喂)
    leoleoasd
        22
    leoleoasd  
       2018-10-29 17:58:52 +08:00   ❤️ 1
    @qceytzn #19 对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5865 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.