REST API에 POST 요청 제출
HTTP POST 요청을 사용하여 REST API에 단일 또는 여러 RPC 요청을 보냅니다. POST 요청을 사용하여 디바이스를 구성할 수 있습니다.
단일 rpc
명령의 경우 끝점의 일반적인 형식은 다음과 같습니다.
scheme://device-name:port/rpc/method[@attributes]/params
-
scheme
:http
또는https
-
method
: Junos OSrpc
명령의 이름입니다.method
이름은 태그 요소와 동일합니다. 자세한 내용은 Junos XML API Explorer를 참조하십시오. -
params
: 선택적 매개 변수 값(name[=value]
)입니다.
요청을 인증하려면 다음 방법 중 하나를 사용할 수 있습니다. 더 안전하므로 옵션을 사용하는 netrc
것이 좋습니다.
-
Authorization 헤더에 포함된 base64로 인코딩된 사용자 이름과 암호를 제출합니다.
curl -u "username:password" http://device-name:port/rpc/get-interface-information
-
또는 .netrc 파일을 사용하여 자격 증명을 저장합니다.
사용자의 홈 디렉토리에서 .netrc 파일을 작성하고 원격 디바이스의 호스트 이름, 사용자 이름 및 비밀번호를 지정하십시오. 예를 들어:
user@host:~$ cat ~/.netrc machine 172.16.2.1 login username password password
사용자에게만 파일에 대한 읽기 및 쓰기 권한이 있는지 확인합니다.
user@host:~$ chmod 600 .netrc
요청에서 옵션을 지정합니다
--netrc
. 예를 들어:user@host:~$ curl --netrc http://172.16.2.1:3000/rpc/get-interface-information
POST 요청에 대한 URI에서 데이터를 쿼리 문자열로 지정하려면 rpc
POST 본문에 쿼리 데이터를 제출합니다. 이러한 경우 다음과 같은 동등한 cURL 호출에 표시된 대로 as text/plain
또는 application/xml
를 지정할 Content-Type
수 있습니다.
curl --netrc http://device-name:port/rpc/get-interface-information --header "Content-Type: text/plain" -d "interface-name=cbp0" curl --netrc http://device-name:port/rpc/get-interface-information --header "Content-Type: application/xml" -d "<interface-name>cbp0</interface-name>"
단일 및 다중 RPC 명령의 경우 HTTP Accept 헤더를 사용하여 다음 Content-Type 값 중 하나를 사용하여 반환 형식을 지정할 수 있습니다.
-
application/xml(기본값)
-
애플리케이션/json
-
text/plain
-
텍스트/html
예를 들어 다음 cURL 호출은 JSON의 출력 형식을 지정합니다.
curl --netrc http://device-name:port/rpc -d "<get-software-information/>" --header "Accept: application/json"
선택적 format
속성을 사용하여 출력 형식을 지정할 수도 있습니다.
curl --netrc http://device-name:port/rpc -d "<get-software-information format='json'/>"
본문에 인수를 포함하는 POST 요청의 기본 Content-Type은 application/xml입니다. 쿼리 문자열과 같은 다른 콘텐츠를 사용하려는 경우 text/plain의 Content-Type을 지정할 수 있습니다. 구성 명령에서 format
속성을 지정합니다.
단일 요청에서 여러 rpc
명령을 실행할 때 엔드포인트의 일반적인 형식은 다음과 같습니다.
scheme://device-name:port/rpc
RPC는 POST 본문에 XML 데이터로 제공되어야 합니다. 응답에 대한 Content-Type은 multipart/mixed이며, 각 RPC 실행의 출력과 연결된 경계 및 하위 유형이 있습니다. Accept 헤더에 지정된 형식은 속성이 누락된 format
경우 각 RPC의 출력 형식으로 사용됩니다. 지정된 RPC에서 Accept 헤더 또는 format
특성을 지정하지 않으면 기본 출력 형식은 XML입니다.
예를 들어, RPC get-software-information
및 get-interface-information
를 실행하기 위해 단일 HTTP 요청을 보내려면 , "Content-Type: application/xml"
를 사용하여 "Auth: Basic <base64hash>"
POST 요청을 /rpc
제출합니다. POST 본문에는 다음이 포함됩니다.
<get-software-information/><get-interface-information/>
다음은 이 POST 본문을 사용하는 cURL 호출입니다.
curl --netrc http://device-name:port/rpc -d "<get-software-information/><get-interface-information/>"
XML을 기본값으로 포함하는 요청의 출력은 다음과 같이 표시됩니다.
HTTP/1.1 200 OK Content-Type: multipart/mixed; boundary=fkj49sn38dcn3 Transfer-Encoding: chunked Date: Thu, 20 Mar 2014 11:01:27 GMT Server: lighttpd/1.4.32 --fkj49sn38dcn3 Content-Type: application/xml <software-information> <host-name>...</host-name> ... </software-information> --fkj49sn38dcn3 Content-Type: application/xml <interface-information> <physical-interface>...</physical-interface> </interface-information> --fkj49sn38dcn3--
POST 본문의 각 요소에 대한 출력 형식을 지정할 수도 있습니다. 예를 들어 다음 요청은 RPC에 get-interface-information
대한 JSON과 RPC에 대한 get-software-information
일반 텍스트를 내보냅니다.
curl --netrc http://device-name:port/rpc -d "<get-interface-information/><get-software-information format='text'/>" --header "Accept: application/json"
여러 RPC를 실행할 때 오류가 발생하면 기본 동작은 오류를 무시하고 실행을 계속하는 것입니다. 첫 번째 오류가 발생할 때 종료하려면 URI에 플래그를 stop-on-error
지정합니다. 예를 들어 다음 요청은 디바이스를 구성하고 오류가 발생하면 종료됩니다.
curl --netrc http://device-name:port/rpc?stop-on-error=1 -d "<lock-configuration/> <load-configuration> <configuration><system><hostname>foo</hostname></system></configuration> </load-configuration> <commit/> <unlock-configuration/>"