วิธีทดสอบ REST API ด้วย Emacs


34

ฉันรวมแอพเข้าด้วยกันและต้องการทดสอบจุดปลายของ api ฉันคิดว่า Emacs จะเป็นวิธีที่ยอดเยี่ยมในการไป - โดยเฉพาะอย่างยิ่งถ้าการตอบสนอง JSON สามารถแยกวิเคราะห์และข้อมูลผลตอบแทนที่ใช้ในการทดสอบครั้งต่อไป

ความคิดใด ๆ เกี่ยวกับวิธีที่จะไปเกี่ยวกับเรื่องนี้หรือเป็นเพียงแค่บ้า?


วิธีที่ง่ายที่สุดคือเรียกใช้คำสั่ง curl shell และวิเคราะห์ผลลัพธ์ด้วย json read
Malabarba

คำตอบ:


45
  • restclientเป็นโหมด "โต้ตอบ" ที่สุด

    นี่เป็นเครื่องมือสำหรับสำรวจและทดสอบเว็บเซอร์ HTTP REST ด้วยตนเอง เรียกใช้แบบสอบถามจากแผ่นแบบสอบถามข้อความธรรมดาแสดงผลลัพธ์เป็น XML ที่พิมพ์สวย JSON และรูปภาพ

    restclient

    คุณสามารถตรวจสอบตัวอย่างขั้นตอนการทำงานที่http://jakemccrary.com/blog/2014/07/04/using-emacs-to-explore-an-http-api/

  • request.el - มีด HTTP ของสวิส

    (request
     "http://httpbin.org/get"
     :params '(("key" . "value") ("key2" . "value2"))
     :parser 'json-read
     :success (function*
               (lambda (&key data &allow-other-keys)
                 (message "I sent: %S" (assoc-default 'args data)))))
    
  • emacs-web - "ความคิดคือการใช้การเรียกกลับเพื่อรวบรวมคำตอบเสมอ"

    แบบฟอร์มการโทรกลับของ JSON อนุญาตให้รวบรวมข้อมูลได้เพียง

    ;; -*- lexical-binding: t -*-
    (require 'web)
    
    (web-json-post 
      (lambda (data &rest stuff)
         (message "%S" data))
      :url "https://httpbin.org/post")
    

23

คำถามเก่าใช่ ... แต่ในกรณีที่ทุกคน Googles นี้; ตัวเลือกอื่นกำลังใช้Org Babelและob-http... (สามารถติดตั้งจากmelpa )

ด้วยorg-babelคุณสามารถสร้าง.orgไฟล์ที่มีhttpบล็อครหัส "" เมื่อบล็อกเหล่านี้ถูกประเมินบล็อกเหล่านั้นจะทำการร้องขอ HTTP และส่งคืนการตอบสนองตามผลลัพธ์

หากบล็อกเหล่านี้มี#+NAME:แอตทริบิวต์ "" คุณสามารถใช้ผลลัพธ์ในorg-babelบล็อกอื่น ๆได้ สิ่งนี้จะช่วยให้การเขียนโปรแกรมความรู้ที่ค่อนข้างดีโดยใช้ผลลัพธ์ของการร้องขอ HTTP

ตัวอย่างเช่นต่อไปนี้เป็นเอกสารองค์กรเล็ก ๆ ที่แสดงการร้องขอ HTTP และแยกวิเคราะห์ JSON ที่ส่งคืนใน Ruby:

* The request
The following is the example request shown on [[https://github.com/zweifisch/ob-http][ob-http's Github page]]...

It isn't anything fancy, but it is a REST API request, and returns
JSON, so it works for the sake of this demonstration:

#+NAME:ob-languages
#+BEGIN_SRC http :pretty
  GET https://api.github.com/repos/zweifisch/ob-http/languages
#+END_SRC

#+RESULTS:
: {
:   "Emacs Lisp": 7034
: }

Notice how this has a "=#+NAME:=" attribute? This is a name we can use
in other =org-babel= blocks. (As you will see below)

* Using the request
Now that I have an =http= request in an org block with a name... Lets
write something in a completely different language and use our HTTP
request's response:

#+BEGIN_SRC ruby :var langs=ob-languages
  require 'json'
  JSON.parse(langs)['Emacs Lisp']
#+END_SRC

#+RESULTS:
: 7034

The =:var= keyword allowed me to assign the "=langs=" variable in the
Ruby block to the result of the =ob-languages= block [[The request][above]].

This didn't have to be in Ruby, this could have been any language,
including another =http= block.

นี่คือลักษณะที่ปรากฏในorg-mode: ob-http ในโหมดองค์กร

การกดปุ่มC-c C-cบนบล็อกด้านล่าง (ทับทิมหนึ่ง) จะประเมินอันดับหนึ่งโดยอัตโนมัติสำหรับการอ้างอิง (นั่นคือ:varบิตในส่วนหัวของบล็อก) นี่จะหมายความว่าการhttpร้องขอนั้นทำขึ้นก่อนจากนั้นผลลัพธ์จะถูกส่งไปยัง Ruby เพื่อดำเนินการต่อไป

คุณสามารถทำสิ่งนี้ได้ด้วยบล็อกจำนวนมากเท่าที่คุณต้องการและมีหลายภาษา

หากสิ่งนี้เหมาะสมกับความต้องการของคุณob-httpต้องใช้การปรับแต่งเล็กน้อยหลังจากที่คุณติดตั้งเพื่อให้มันทำงานได้ (ไม่ต้องกังวลมันไม่มาก)

หลังจากติดตั้งob-httpคุณจะต้องปรับแต่งสองตัวแปรและorg-src-lang-modesorg-babel-load-languages

ดังนั้นโดยการเรียกใช้M-x customize-variableคุณสามารถปรับแต่งแต่ละรายการเพื่อรวมสิ่งต่อไปนี้:

org-src-lang-modes: คุณจะต้องปรับแต่งตัวแปรนี้เพื่อรวมการจับคู่ภาษาอีกหนึ่งภาษาเพื่อให้คุณสามารถแทรกค่าอีกหนึ่งค่าลงในส่วนท้ายของรายการ:

String: http
Symbol: ob-http

จากนั้นคุณสามารถC-x C-sบันทึกการปรับแต่งที่

org-babel-load-languages: คุณจะต้องการเพิ่มอีกหนึ่งรายการในรายการorgภาษาที่เปิดใช้งาน " http"

แม้ว่าคุณอาจต้องเพิ่มมันเข้าไปในรายการด้วยตนเองหากตัวเลือกไม่ได้อยู่ในตัวเลือกที่เป็นไปได้คุณสามารถทำได้โดยคลิกที่ "รัฐ" และเลือก " :" เพื่อแสดงนิพจน์เสียงกระเพื่อม ... จากนั้นคุณจะเพิ่มต่อไปนี้เพียง หน้าวงเล็บปิดสุดท้าย:

(http . t)

หลังจากนั้นรวดเร็วC-x C-sและM-x org-reloadควรเป็นสิ่งที่คุณต้องการ .. !


จะใช้ ob-http สำหรับโพสต์ไฟล์ได้อย่างไร
Anuvrat Parashar

2

ฉันเขียน httprepl เพื่อจุดประสงค์นี้ มันจะให้แบบจำลอง comint-based ที่คุณสามารถออกคำขอ http

https://github.com/gregsexton/httprepl.el

คุณสามารถเพิ่มฟังก์ชั่นที่ใช้ผลการร้องขอได้อย่างง่ายดาย เหล่านี้มักจะใช้สำหรับการพิมพ์ที่สวย ฯลฯ แต่การแยกวิเคราะห์โครงสร้าง elisp ควรเป็นเรื่องง่ายโดยใช้ไลบรารี builtin json


-1

เป็นไปได้ที่จะทำอย่างสมบูรณ์เพราะฉันทำสิ่งเดียวกันเกือบทั้งหมด มีข้อแม้อยู่สองสามข้อ แรกของทั้งหมดที่ฉันมีในท้องถิ่น xmlrpc.el แพทช์ห้องสมุด วิธีนี้จะช่วยแก้ปัญหาสองประการความไม่ลงรอยกันกับ emacs ที่ทันสมัยและความสามารถในการส่งผ่านส่วนหัวการตรวจสอบสิทธิ์ในคำขอ ข้อมูลที่ฉันกำลังประมวลผลคือ JSON ใน XML แต่คุณอาจจะข้ามขั้นตอน XML ได้ขึ้นอยู่กับการตั้งค่าของคุณ

การยก RPC ที่หนักทั้งหมดนั้นทำได้ในlava-rpc.elแต่ก็ไม่ยากที่จะติดตาม คุณสามารถเห็นการเรียกร้องให้ส่งชิ้น stringified ของ JSON ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.