Як перевірити REST API за допомогою Emacs?


34

Я збираю додаток і хочу перевірити кінцеві точки api. Я вважав, що Emacs - це класний шлях - особливо, якщо відповіді JSON можна було б проаналізувати та повернути дані, які використовувались у наступних тестах.

Будь-які ідеї, як з цим піти, чи це просто шалено?


Найпростіший спосіб - викликати команду оболонки curl та аналізувати результати за допомогою json read.
Малабарба

Відповіді:


45
  • restclient - це найбільш "інтерактивний" режим.

    Це інструмент для ручного вивчення та тестування веб-сервісів HTTP REST. Запускає запити з простого тексту запиту, відображає результати у вигляді симпатичного друку XML, JSON і навіть зображень.

    відпочиваючий

    Ви можете перевірити приклад робочого процесу на веб-сайті 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

Старе питання, так ... Але на випадок, якщо хтось гугл це; інший варіант - використання Org Babel і ob-http... (Можна встановити з melpa .)

"" org-babelВи можете створити .orgфайл, що містить " http" кодові блоки. Коли ці блоки будуть оцінені, вони зроблять HTTP-запит і повернуть відповідь як результат.

Якщо ці блоки мають #+NAME:атрибут " ", ви можете використовувати їх результати в будь-якому іншому org-babelблоці. Це дозволяє отримати досить акуратне грамотне програмування, використовуючи результати HTTP-запитів.

Наприклад, ось невеликий документ Org, який демонструє запит 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 в org-режимі

При натисканні C-c C-cна нижній блок (Ruby) автоматично буде оцінено верхній на предмет залежності (Це :varбіт у заголовку блоку.). Це буде означати, що httpзапит робиться спочатку, а потім результати передаються Ruby для подальшої обробки.

Ви можете зробити це з якомога більше блоків і з якоюсь кількістю мов.

Якщо це відповідає вашим потребам, ob-httpпотрібно трохи встановити ручне налаштування після встановлення, щоб він працював. (Не хвилюйтеся, це не так вже й багато)

Після встановлення ob-httpвам потрібно налаштувати дві змінні:, org-src-lang-modesі org-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".

Хоча вам може знадобитися додати його до списку вручну, якщо параметр не є можливими параметрами, ви можете зробити це, натиснувши "Стан" та вибравши " :", щоб показати вираз Lisp ... Тоді ви додали б лише наступне перед останніми дужками, що закриваються:

(http . t)

Після цього швидкий C-x C-sі M-x org-reloadмає бути все, що вам потрібно ..!


як об-http можна використовувати для розміщення файлів?
Ануврат Парашар

2

Я написав httprepl саме для цієї мети. Це дає змогу на основі comint-відповіді, де ви можете надсилати http-запити.

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

Ви можете легко додати функції, які споживають результат запитів. Зазвичай вони використовуються для симпатичного друку тощо, але розбір структури elisp повинен бути простим за допомогою вбудованої бібліотеки json.


-1

Це цілком можливо зробити, тому що я роблю майже точно те саме. Однак є пара застережень. Перш за все, у мене є локальна бібліотека патчів xmlrpc.el . Це вирішує дві проблеми, несумісність із сучасними emacs та можливість передавати заголовки аутентифікації у запиті. Дані, які я обробляю, - це JSON у XML, але, можливо, ви зможете пропустити крок XML залежно від налаштувань.

Весь важкий підйом RPC проводиться в lava-rpc.el, але це не повинно бути важким для дотримання. Ви можете побачити заклик надіслати штрихований фрагмент json тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.