Emacs로 REST API를 테스트하는 방법?


34

앱을 만들고 있는데 API 끝점을 테스트하고 싶습니다. 특히 JSON 응답을 파싱하고 후속 테스트에 반환 데이터를 사용하는 경우 이맥스가 멋진 방법이 될 것이라고 생각했습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?


가장 쉬운 방법은 curl shell 명령을 호출하고 json read로 결과를 구문 분석하는 것입니다.
Malabarba

답변:


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

오래된 질문입니다.하지만 Google이 누구든지 이것을 할 경우 다른 옵션은 Org Babelob-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. org-mode의 ob-http

C-c C-c맨 아래 블록 (Ruby one)에 타격 을 가하면 자동으로 상위 :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".

옵션이 가능한 옵션에없는 경우 수동으로 목록에 추가해야 할 수도 있지만 "상태"를 클릭하고 " :"를 선택 하여 Lisp 표현식을 표시하면됩니다. 그러면 다음을 추가하면됩니다. 마지막 괄호 앞에 :

(http . t)

그 후, 신속 C-x C-s하고 M-x org-reload필요한 모든 것입니다 ..!


ob-http를 사용하여 파일을 게시하는 방법은 무엇입니까?
Anuvrat Parashar

2

이 목적을 위해 httprepl을 작성했습니다. http 요청을 실행할 수있는 comint 기반 repl을 제공합니다.

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

요청 결과를 소비하는 기능을 쉽게 추가 할 수 있습니다. 이들은 일반적으로 예쁜 인쇄 등에 사용되지만 내장 json 라이브러리를 사용하여 elisp 구조로 구문 분석하는 것이 간단해야합니다.


-1

나는 거의 똑같은 일을 직접하기 때문에 완벽하게 할 수 있습니다. 그래도 몇 가지 경고가 있습니다. 우선 로컬 패치 xmlrpc.el 라이브러리가 있습니다. 있습니다. 이것은 현대 이맥스와의 비 호환성과 요청에서 인증 헤더를 전달하는 능력이라는 두 가지 문제를 해결합니다. 처리중인 데이터는 XML의 JSON이지만 설정에 따라 XML 단계를 건너 뛸 수 있습니다.

모든 무거운 RPC 리프팅은 lava-rpc.el 에서 수행 되지만 따라 가기 어렵지 않아야합니다. 여기서 문자열 화 된 json 조각을 제출하라는 호출을 볼 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.