すぐにcurlを置いてhttpieを持って効率的に仕事をしなければなりません


背景
本文の著者は長期にわたってマイクロサービス開発に従事し、実践の中でhttpieは私に多くの効果をもたらした.もしあなたがまだcurlを使っているなら、この文章はあなたにあげます.pythonには人間に使うrequestsライブラリがあり、とても簡単で便利です.httpieはrequestsに基づいて開発され、curlの代わりに人間に使用されるコマンドラインツールの絶好のツールである.
「人間用」って何?
長期的な理解を経て、私の総括は以下の通りです:人類に使う、以下を満たす必要があります:
  • は、一般的なシーン、おおよその動作をデフォルトの
  • に変更します.
  • 人間が最も核心的な業務情報を入力するだけで、余分な文法フォーマットはプログラム自身が分析して判断する
  • 機械に使われるのは、すべての行為であり、よく見られるかよくないかにかかわらず、具体的な命令が必要だ.
    最初の技術は、機械に使われていた.長期の実践の中で、人類は多くのよくある行為あるいはシーンが現れて、これらの行為、シーンをデフォルト値に変えるなどの方式、大体率のシーンの中で、人類の仕事量を節約することができます.
    参考資料
    時間があれば公式文書を読むことをお勧めします
    httpie応用エッセンス
    httpie VS curl
    curl
    curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \ 
       "send_type": "wechat", \ 
       "to": [ \ 
         "xn080xxx", \ 
       ], \ 
       "content": "this is xxx alert" \ 
     }' 'http://aaa.xxx.com/api/v1/alert'

    http
    http aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert"

    httpバージョンはcurlよりずっと簡単で、主な原因は以下の通りです.
  • は、一般的なシーン、おおよその動作をデフォルトの
  • に変更します.
  • 人間が最も核心的な業務情報を入力するだけで、余分な文法フォーマットはプログラム自身が分析して判断する
  • 具体的には:1.getとpostは大まかな行為であり,人間がgetを実行する場合,request dataは持たず,request dataは基本的にpost行為である.したがって、httpieは、この2つの一般的な推定動作をデフォルト値にします.-httpコマンドにrequest dataがない場合、デフォルトの動作はgetです.request dataが付いている場合、デフォルトの動作はpost 2です.jsonインタラクションを採用するのは基本的に現在の人類の最も一般的なシーンであるため、headerの2つの場所はデフォルトでアプリケーション/jsonに設定され、大体率シーンで人工入力を節約することができる.jsonインタラクションは大まかなイベントとして,jsonデータ入力を簡略化することで多くの人件費を節約できる.curlはjsonのrawのフォーマット入力を採用しており,あまり効率的ではない.httpieは=request dataを表し、:header dataを表し、==query dataを表し、自動的に識別し、個々のデータ体をぼんやり定義する必要がなく、余分な人工操作をできるだけ自動化する.文字列入力は大まかな動作であるため、文字列の付与値は、スペースなどの特殊な文字が入っていない限り、二重引用符を必要としません.その他の比較的小さい確率のデータ型を採用する:=入力を行う(rawフォーマット、例えば整形数、配列).http://を追加しなくてもいいです.これはデフォルトの動作です.
    以上の解析から,httpieは概略率の人工操作を簡略化して設計したため,人工操作に多くの時間を節約できることが分かった.
    インストール
    こんな立派なものを急いで取り付ける
    pip install httpie

    使用時はhttpで、httpではありません
    もっと簡単に
    次の一般的なコマンドを参照して、httpsサイトにjsonデータをpostし、認証が必要です.
    http https://aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert -a username:password"

    httpsの簡略化
    あなたの~/.bashrcなどの類似ファイルの追加:
    alias https='http --default-scheme=https'

    これにより、以下のように簡略化できます.
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert -a username:password"

    このようなaliasはとても便利で、httpとhttpsはとてもイメージが直感的です.
    認証のシンプル化とパスワード情報の非表示
    sessionメソッド
    初回実行
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert" -a username:password --session=your-session-name

    これにより、ヘッダー、認証、クッキーなどの情報が含まれたセッションファイルが生成されます(デフォルトは~/.httpie/sessions/your_url/your_sesssion_name)
    後で実行し、このセッションファイルを直接使用すればよいので、-a username:passwordを追加する必要はありません.
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert" --session=your-session-name

    .Netrcメソッド(より簡単)
    にありますNetrcに追加
    machine url_you_want_to_visit
    login your_username
    password your_password

    これにより、プログラムは自動的にこの認証を持ち、文は以下のように簡略化されます.
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert"

    ~/.Netrcは汎用的な方法であり、ファイルをサポートする他のネットワーク操作でもこの方法を採用することができる.
    jsonデータの簡略化
    開発テストでは,類似の命令を繰り返すことがしばしば必要であり,jsonデータも入力を簡略化できるかどうかが分かる.
    面倒入力を簡略化する非文字列部分
    上の文は最も面倒で、しかもよく间违えるのはto:='[“xn 080 xxx”]で、単引用符、二重引用符は间违えてはいけなくて、最も外は単引用符で、中の要素は二重引用符で、私はNを何度も使って、しばらく使っていないでまた忘れやすいです.httpieサポートファイルの入力を簡略化する、例えばto.jsonファイル、中身
    ["xn080xxx"]

    これにより、上記の文は次のように簡略化されます.
    https aaa.xxx.com/api/v1/alert send_type=tts to:[email protected] content="this is alert"

    @後ろに付いているのはファイルです
    すべてのデータはファイルから(最も簡単)
    リダイレクトを使用してsendなどの新しいファイルを追加します.json
    {
         "send_type": "tts",
         "to": ["xn080xxx"],
         "content": "this is alert"
     }

    上記の文は、次のように簡略化されています.
    https aaa.xxx.com/api/v1/alert < send.json"

    はい、これはもう極めて簡素です.
    httpieがスクリプトに適用される注意事項
    httpieはスクリプトで使用されますが、いくつかの点(間違いやすい点)に注意する必要があります.
    httpはデフォルトで返されるステータスコードを無視し、2 xx、4 xxなどを区別する必要がある場合は–check-statusを追加する必要があります
    https --check-status aaa.xxx.com/api/v1/alert < send.json"

    このように、2 XXが戻ったとき、echo$は?得られるのは0です.4 xxが戻ったとき、echo$手に入れたのは4
    In入力パイプの問題
    このピットはピットされ、スクリプトではin入力パイプがリダイレクトされ、いくつかのデータが入力され、予想できない動作が発生します.-ignore-stdin:
    https --check-status --ignore-stdin aaa.xxx.com/api/v1/alert < send.json"

    課外:おもしろいhttp-prompt
    pip install http-prompt後、httpieを新しいコンセプトで操作する方法を体験できますhttp-prompt
    疑問を解く
  • 環境変数を使用すると、
  • など、正常に使用できません.
    export phone=1862030xxxx
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["${phone}"]' content="this is alert"

    に答える
    本質は,単一引用符内の変数は正常に解析されず,バックエンドで受け取ったtoのvalueは実際には${phone}である.一重引用符に変数を解析する必要がある場合は、次のように一重引用符を追加します.
    https aaa.xxx.com/api/v1/alert send_type=tts to:='["'${phone}'"]' content="this is alert"

    実際、shellに文法がハイライトされていると、単一引用符の中には変数が翻訳されていないこともわかります.(向上:多くの言語でも、このルールに従って、単一引用符内の変数は翻訳されず、groovy言語などの二重引用符内の変数は翻訳されません)