REST API Emacs ile nasıl test edilir?


34

Bir uygulamayı bir araya getiriyorum ve api bitiş noktalarını test edebilmek istiyorum. Emacs'ın, bunun için iyi bir yol olacağını düşündüm - özellikle JSON yanıtları ayrıştırılabilir ve sonraki testlerde geri dönüş verileri kullanılırsa.

Bu konuda nasıl bir fikir, ya da bu sadece deli mi?


En kolay yol, bir kıvrık kabuk komutunu çağırmak ve sonuçları json read ile ayrıştırmaktır.
Malabarba

Yanıtlar:


45
  • restclient en "etkileşimli" moddur.

    Bu, HTTP REST web servislerini manuel olarak keşfetmek ve test etmek için bir araçtır. Sorguları düz metin bir sorgu sayfasından çalıştırır, sonuçları oldukça basılmış bir XML, JSON ve hatta görüntüler olarak görüntüler.

    restclient

    Bir iş akışı örneğini http://jakemccrary.com/blog/2014/07/04/using/emacs-to-explore-an-http-api/ adresinden kontrol edebilirsiniz .

  • request.el - HTTP İsviçre bıçağı.

    (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 - "Fikir, yanıtı toplamak için her zaman geri aramaları kullanmaktır."

    JSON geri arama formu yalnızca verilerin toplanmasına izin verir:

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

23

Eski soru, evet ... Ama herkesin Googles olması durumunda; Başka bir seçenek Org Babel kullanıyor ve ob-http... ( melpa'dan yüklenebilir .)

İle " " kod bloklarını içeren org-babelbir .orgdosya oluşturabilirsiniz http. Bu bloklar değerlendirildiğinde, HTTP isteğinde bulunurlar ve sonucu olarak yanıtı döndürürler.

Bu blokların " #+NAME:" özniteliği varsa, sonuçlarını başka herhangi bir org-babelblokta kullanabilirsiniz. Bu, HTTP isteklerinin sonuçlarını kullanarak oldukça temiz bir okuma yazma programlamasına olanak tanır.

Örneğin, bir HTTP isteği yapıp iade edilen JSON'u Ruby'de ayrıştırmayı gösteren küçük bir Org belgesi:

* 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.

Bu şöyle gözüküyor org-mode: org modunda ob-http

C-c C-cAlt bloğa (The Ruby) vurmak , birinciyi bağımlılığı açısından otomatik olarak değerlendirecektir (Bu :var, bloğun başlığındaki bit.). Bu, httpisteğin önce yapıldığı ve ardından sonuçların daha fazla işlenmesi için Ruby'ye iletildiği anlamına gelir .

Bunu istediğiniz kadar blokla ve birçok dilde yapabilirsiniz.

Bu ihtiyaçlarınızı karşılıyorsa, ob-httpçalışabilmesi için taktıktan sonra bir miktar el ile ayarlama yapmanız gerekir. (Endişelenme, o kadar değil)

Yüklemeden sonra ob-http, iki değişkeni özelleştirmeniz gerekir:, org-src-lang-modesve org-babel-load-languages.

Böylece, çalıştırarak M-x customize-variableher birini aşağıdakileri içerecek şekilde özelleştirebilirsiniz:

org-src-lang-modes: Bu değişkeni bir tane daha dil eşlemesi içerecek şekilde özelleştirmek isteyeceksiniz, böylece listenin sonuna bir tane daha değer ekleyebilirsiniz:

String: http
Symbol: ob-http

Sonra C-x C-sbu özelleştirmeyi kaydetmek için yapabilirsiniz .

org-babel-load-languages: Etkin orgdiller listesine bir öğe daha eklemek isteyeceksiniz . " http"

Seçenek olası seçeneklerde değilse, listeye el ile eklemeniz gerekebilir, ancak :Lisp ifadesini göstermek için "Durum" u tıklayarak ve " " seçeneğini seçerek yapabilirsiniz. son kapanış parantezinden önce:

(http . t)

Bundan sonra, hızlı C-x C-sve M-x org-reloadihtiyacınız olan her şey olmalı ..!


ob-http dosya gönderme için nasıl kullanılabilir?
Anuvrat Parashar

2

Bu amaçla httprepl yazdım. Size http isteklerini iletebileceğiniz bir comint tabanlı repl verir.

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

İsteklerin sonucunu tüketen işlevleri kolayca ekleyebilirsiniz. Bunlar genellikle güzel baskı vb. İçin kullanılır, ancak elisp yapısına ayrıştırma, yerleşik json kütüphanesini kullanarak basit olmalıdır.


-1

Bunu yapmak tamamen mümkün çünkü ben de aynısını kendim yapıyorum. Yine de birkaç uyarı var. Her şeyden önce yerel bir yama xmlrpc.el kütüphanesi var . Bu iki sorunu çözüyor, modern emac'lerle uyumsuzluk ve talepte kimlik doğrulama başlıklarını geçme yeteneği. İşlediğim veriler XML'de JSON'dur ancak kurulumunuza bağlı olarak XML adımını atlayabilirsiniz.

Tüm ağır RPC kaldırma lava-rpc.el içinde yapılır, ancak takip edilmesi zor olmamalıdır. Sıkı bir json göndermek için çağrıyı burada görebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.