Làm cách nào để kiểm tra API REST với Emacs?


34

Tôi đang kết hợp một ứng dụng và muốn có thể kiểm tra các điểm cuối api. Tôi cho rằng Emacs sẽ là một cách hay để đi - đặc biệt là nếu các phản hồi JSON có thể được phân tích cú pháp và dữ liệu trả về được sử dụng trong các thử nghiệm tiếp theo.

Bất kỳ ý tưởng về làm thế nào để đi về điều này, hoặc điều này chỉ là điên rồ?


Cách dễ nhất là gọi lệnh shell curl, và phân tích kết quả với json read.
Malabarba

Câu trả lời:


45
  • restclient là chế độ "tương tác" nhất.

    Đây là một công cụ để tự khám phá và kiểm tra các dịch vụ web HTTP REST. Chạy các truy vấn từ một bảng truy vấn văn bản đơn giản, hiển thị kết quả dưới dạng XML, JSON và các hình ảnh thậm chí được in đẹp.

    nghỉ ngơi

    Bạn có thể kiểm tra một ví dụ về quy trình làm việc tại http://jakemccrary.com/blog/2014/07/04/USE-emacs-to-explore-an-http-api/ .

  • request.el - dao swiss 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 - "Ý tưởng là luôn sử dụng các cuộc gọi lại để thu thập phản hồi."

    Biểu mẫu gọi lại JSON cho phép chỉ thu thập dữ liệu:

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

23

Câu hỏi cũ, vâng ... Nhưng trong trường hợp bất cứ ai cũng làm điều này; một tùy chọn khác là sử dụng Org Babelob-http... (Có thể được cài đặt từ melpa .)

Với org-babel, bạn có thể tạo một .orgtệp chứa httpcác khối mã "". Khi các khối này được ước tính, chúng sẽ thực hiện yêu cầu HTTP và trả về kết quả là kết quả.

Nếu các khối này có #+NAME:thuộc tính "", bạn có thể sử dụng kết quả của chúng trong bất kỳ org-babelkhối nào khác . Điều này cho phép một số chương trình biết chữ khá gọn gàng bằng cách sử dụng kết quả của các yêu cầu HTTP.

Ví dụ, đây là một tài liệu Org nhỏ thể hiện yêu cầu HTTP và phân tích cú pháp JSON được trả về trong 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.

Đây là những gì nó trông giống như trong org-mode: ob-http ở chế độ org

Đánh C-c C-cvào khối dưới cùng (The Ruby one) sẽ tự động đánh giá khối trên cùng cho sự phụ thuộc của nó (Đó là :varbit trong tiêu đề của khối.). Điều này có nghĩa là httpyêu cầu được đưa ra trước, và sau đó kết quả được chuyển đến Ruby để xử lý thêm.

Bạn có thể làm điều này với bao nhiêu khối tùy thích và với nhiều ngôn ngữ.

Nếu điều này phù hợp với nhu cầu của bạn, ob-httpđòi hỏi một chút tinh chỉnh thủ công sau khi bạn cài đặt nó để nó hoạt động. (Đừng lo lắng, nó không nhiều lắm)

Sau khi cài đặt ob-http, bạn cần tùy chỉnh hai biến: org-src-lang-modesorg-babel-load-languages.

Vì vậy, bằng cách chạy M-x customize-variable, bạn có thể tùy chỉnh từng cái để bao gồm:

org-src-lang-modes: Bạn sẽ muốn tùy chỉnh biến này để bao gồm thêm một ánh xạ ngôn ngữ, vì vậy bạn có thể chèn thêm một giá trị vào cuối danh sách:

String: http
Symbol: ob-http

Sau đó, bạn có thể C-x C-slưu tùy chỉnh đó.

org-babel-load-languages: Bạn sẽ muốn thêm một mục vào danh sách các orgngôn ngữ được kích hoạt . " http".

Mặc dù, bạn có thể cần thêm nó vào danh sách theo cách thủ công nếu tùy chọn không có trong các tùy chọn có thể, bạn có thể làm điều đó bằng cách nhấp vào "Trạng thái" và chọn " :" để hiển thị biểu thức Lisp ... Sau đó, bạn sẽ thêm vào sau đây trước dấu ngoặc đơn đóng cuối cùng:

(http . t)

Sau đó, nhanh chóng C-x C-sM-x org-reloadnên là tất cả những gì bạn cần ..!


Làm thế nào ob-http có thể được sử dụng để đăng các tập tin?
Anuvrat Parashar

2

Tôi đã viết httprepl cho chính xác mục đích này. Nó cung cấp cho bạn một thay thế dựa trên comint nơi bạn có thể đưa ra các yêu cầu http.

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

Bạn có thể dễ dàng thêm các chức năng tiêu thụ kết quả của các yêu cầu. Chúng thường được sử dụng để in đẹp, v.v. nhưng việc phân tích cú pháp thành một cấu trúc elisp nên đơn giản bằng thư viện json dựng sẵn.


-1

Hoàn toàn có thể làm được vì bản thân tôi cũng làm gần như vậy. Có một vài cảnh báo mặc dù. Trước hết tôi có một thư viện xmlrpc.el vá cục bộ . Điều này giải quyết hai vấn đề, sự không tương thích với các emac hiện đại và khả năng vượt qua các tiêu đề xác thực trong yêu cầu. Dữ liệu tôi đang xử lý là JSON trong XML nhưng bạn có thể bỏ qua bước XML tùy thuộc vào thiết lập của bạn.

Tất cả các nâng RPC nặng được thực hiện trong lava-rpc.el nhưng không khó để theo dõi. Bạn có thể thấy cuộc gọi để gửi một đoạn json được xâu chuỗi ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.