DevOps/Programmability2018.04.06 12:48

Today Key. : Postman, 포스트맨, API, REST, 개발, 테스트, getpostman  

 


 

이번 포스팅은 REST API의 테스트를 효과적으로 할 수 있는 Postman이라는 도구에 대한 포스팅입니다.

 

현재 대다수의 벤더의 장비들이 REST API 제공하고 있습니다. 이러한 REST API 테스트 있도록 장비 자체적으로

Sandbox 제공하는 경우도 있지만그렇지 않은 경우에는 REST API 테스트 하는 방법이 쉽지는 않습니다.

 

이런 경우에 사용할 있는 도구가 바로 오늘 포스팅하는 Postman 입니다.

 

실제로 Postman API 개발을 하고 테스트를 하기 위해서 개발자들이 많이 사용하는 도구입니다.

 

Postman 사이트(https://www.getpostman.com)에서 Postman 대해서 다음 Postman 설명하고 있습니다.

 

API 개발을 위해서 사용하는 toolchain

 - 글로벌하게 가장 많이 사용되는 REST client

 - API 개발자를 위해서 고안됨

 - request 보내고, response 저장하고, 테스트를 하고, 워크플로우를 만드는 등의 작업에 대해서 직관적인 인터페이스를 제공

 

 

 

오늘은 Postman 설치와 Postman 사이트에서 나온 설치 , 기본 예제 실행까지만 간단히 알아보겠습니다.

 

 

먼저 Postman 사이트입니다.  (Download App을 하시면 됩니다.)

 

 

 

다음과 같이 MAC, Windows, Linux 모두 가능합니다.

여기에서는 Windows 환경에서 설치 하겠습니다.

 

 

※ 참고로 별도 설치가 아닌 Chrome의 AppStore에서 Plug-in 형태로도 설치가 가능합니다.

   하지만, 별도의 App으로의 설치를 권고합니다.  Chrome 플랫폼의 제한으로 인해서 별도 App에서만 제공되는 몇 가지 기능들이 있습니다.

 

 

 

설치 파일을 다운로드 받아서 실행하면 다음과 같이 설치가 됩니다.

 

 

 

설치가 완료된 후, 처음 실행된 화면입니다.

 

 

 

다음의 Postman 사이트에서 기본 Request에 대한 동작을 간략하게 설명한 그림입니다.

Postman을 이용해서 요청할 주소를 기입하고 Send 버튼을 보내면, 이에 대한 값을 받아서 Postman에서는 다시 화면에 보여주게 됩니다.

 

 

 

 

이제 실제 Postman 화면에서 저 예제를 실행합니다.

postman-echo.com/get 을 URL 입력 칸에 기입합니다.

오른쪽의 Send 버튼을 클릭하면, 다음의 그림과 같은 결과가 출력됩니다.

정상적으로 stauts가 200 OK가 떨어지고, 얼마만에 응답이 왔는지 등의 정보를 확인할 수 있습니다.

 

 

 

실제 저 주소를 브라우저에서 치면, 다음과 같은 값을 볼 수 있습니다.

일반 브라우저에서도 해당 내용을 확인할 수 있겠지만,

Postman을 사용하면 좀 더 직관적으로 결과 값을 볼 수 있을 것입니다.

 

 

 

 

다음은 제 블로그를 동일하게 실행한 결과 값입니다.

 

 

 

이번 포스팅은 아주 간단한 Postman에 대한 소개와 설치 방법 그리고 Postman Guide에 있는 첫 번째 예제까지 살펴 보았습니다.

 

이후 포스팅에서 Postman에 대한 좀 더 알아보고,

 

어떻게 네트워크 장비에서 제공되는 Rest API에 활용할 수 있을 것인지에 대해서 다룰 예정입니다.

 

 

 

 

 

Posted by 네떡지기
분류없음2016.01.14 13:12

Today Key : Cloud Native App, CNA, Microsoft, Service, MSA, Immutable Infrastructure

 

이번 포스팅은 Cloud Native App에 관한 포스팅입니다.

이 포스팅은 2번에 걸쳐서 나눠서 올려지며, 이번에는 간단한 발표용으로 만든 프레젠테이션 이미지를 포스팅하며

이번 주말 전까지는 일반 포스팅 형식으로 같은 내용을 포스팅 할 예정입니다.

본 자료는 슬라이스쉐어로도 업로드되어 있으니, 다운로드는 아래 링크에서 받으시면 됩니다.
( 슬라이드쉐어 : http://www.slideshare.net/ssuserc08d76/cloud-native-app )


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 네떡지기
분류없음2016.01.03 23:17

Today : REST, API, REST-API, RESTful

 

 


 

 

REST-API ( Representational State Transfer)

 

 

<간단요약>

  Server Client간의  표준 HTTP 방식을 통해서 Platform 독립적으로 통신하여 작업을 처리하도록 하는 API.

  기존의 HTTP 표준 방식을 그대로 사용하기 때문에 별도의 메시지 처리를 위한 부하가 없음.

  REST 아키텍처 원칙을 이행하는 방식을 RESTful이라고 . (REST RESTful 서로 다른 개념이 아님)

 

 

 

 

Wiki :

REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다.

엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 간단한 의미로는, 웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다. 이 두 가지의 의미는 겹치는 부분과 충돌되는 부분이 있다. 필딩의 REST 아키텍처 형식을 따르면 HTTPWWW이 아닌 아주 커다란 소프트웨어 시스템을 설계하는 것도 가능하다. 또한, 리모트 프로시저 콜 대신에 간단한 XMLHTTP 인터페이스를 이용해 설계하는 것도 가능하다.

 

 

REST

HTTP URI를 통해 Resource를 명시하고, HTTP Method(Post, Get, Put, Delete)를 통해 해당 Resource에 대한 CRUD Operation을 적용한다. 즉, REST는 ROA(Resource Oriented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미한다.

   CRUD(Create Read Update Delete)

 

 

 

 

REST Architecture 원칙

  Client/Server

  - 클라이언트와 서버 아키텍처 스타일을 사용하여, 서로의 기능을 분리하여 구현

   - 다양한 플랫폼에 대한 이식성 향상

Uniform Interface  (Platform agnostic)

   -  HTTP 표준에 따르는 일관된 인터페이스를 사용

   - 플랫폼, 기술 등에 대해서는 종속적이지 않고 Loosely coupling 되도록 하는 형태

  Stateless

  - Server Client 서비스를 위한 상태 정보를 유지하지 않음.  (Ex. HTTP Session)

   - 정보의 흐름에 대한 가시성 제공 복잡도를 낮춰서 안정적으로 운영 가능.

  - Visibility, Reliability, Scalability 향상

      * Visibility : 별도의 상태정보 없이 단일 Request 대해서만 모니터링,

      * Reliability : partial failures에서 복구 작업이 편리

      * Scalability : 단일 Request 대한 처리로 빠르게 서버 자원에 대한 회수가 가능하며, 구현도 간소화 .

  Cache

  - 기존 HTTP 프로토콜 기반에서 사용 가능 했던 Cache 기능을 그대로 사용 가능하여, 응답시간 성능에 향상

  Layered system

  - 서버의 서비스를 계층적으로 구성

  - 클라이언트가 REST API 서버를 호출을 하게 되면, 서버에서는 내부적으로 계층화 서비스(서비스 구현도 독립적으로)
   
통해서 결과 값을 제공.

  Code on demand (Optional) 

  - Scripts 플러그인 같은 실행 가능한 프로그램을 클라이언트에 전송하여, 클라이언트가 실행

   - 기능을 확장하고 구현을 단순화 가능

  - , 기존의 가시성을 감소 시킬 있음.

   

위의 REST 아키텍처를 구현한 것을 RESTful 하다고 . (REST 따르려는 이들을 RESTafrians이라고도 )

 

 

REST 구성

Resource  : 리소스에 대한 정의. URI 통해서 개별 자원은 독립적인 URI 가지게 .

Action : 리소스에 대한 처리 방법을 정의. HTTP Methon(Post, Get, Put, Delete) 사용

Message : 리소스에 대한 처리 방법에 대한 상세를 정의. HTTP Message Pay Load 통해서 표현.

                      다양한 컨텐츠 타입을 선언하여 사용 가능. (주로 JSON 많이 사용)

 

REST 장점

Open API 제공의 편리

Multi Platform 지원 연동 용이

데이터 형식이 독립적, 원하는 타입(Json, Xml, rss) 데이터 전달 가능

기존에 사용하던 HTTP 그대로 사용

 

 

 

 

참조

http://bcho.tistory.com

http://regularmotion.kr

https://speakerdeck.com/leewin12/rest-api-seolgye

https://ko.wikipedia.org/wiki/REST

등..

Posted by 네떡지기
분류없음2015.08.21 13:49

Docker,Remote, API,client,  library, python,host, 원격, 리모트, 도커, git : today Key

 

 Docker의 6번째 포스팅입니다. 이번 포스팅에서는 Docker를 Remote에서 제어할 수 있도록 제공되는 Remote API client libraries에 대해서 다뤄봅니다. 보안적인 측면보다는 최대한 우선 쉽게 접근하는 걸 목표로 잡고 있기 때문에 이 점은 감안해서 봐주시면 감사하겠습니다. ^^

이런 식으로 Docker를 Client에서도 다룰 수 있다는 것 정도로 보면 어떨까 싶습니다! ^^

물론 이러한 API를 활용하여 Docker Host를 관리하도록 한다면 Docker의 명령을 직접 입력하지 않고 Application을 클릭하는 것만으로도

docker를 관리할 수 있을 것입니다.


 

Docker Remote API Client libraries

    Docker에서는 Client가 Docker Host를 제어하기 위한 다양한 언어로 구성된 API Library에 대해 있음  

    Docker를 작성한 Go를 비롯한 다양한 언어에 대한 Library가 Git을 통해서 제공되기 때문에 원하는 언어를 선택 가능. 

    Client는 Host를 제어하는 역할이기 때문에 별도의 Docker Engine를 설치할 필요가 없으며,

       Windows,Mac 등에서도 직접 사용 가능.

    본 포스팅에서는 Windows기반의 PC에서 Python Library를 사용하여 Docker Host를 제어

   • Docker API LINK : https://docs.docker.com/reference/api/remote_api_client_libraries/

   

  

 

 

Docker Remote API Client libraries - Python

    Python용 Library를 설치

          - pip install docker-py  [ Docker Python Library가 있는 Git 페이지에도 나와있음 ]

          - https://github.com/docker/docker-py

 

 

    Python Shell에서 Docker Host에 접속 및 정보 확인

          - docker.client 라이브러리를 Load

          - Docker Host에 접속

              ※ Docker Host에서 기본 Unix Sock 접속이 아닌 TCP로 접속할 수 있도록 설정 필요.

          - info() 메서드를 사용하면 현재 Docker Host에 대한 정보를 확인할 수 있음.

 

 

   Docker Image 정보 확인

          - images() 메서드를 통해서 Docker Host에 있는 이미지 정보를 출력

          - docker images 역할

 

 

   Docker Image 정보 확인 변형

          - 위에 표기된 대로, 모든 정보가 다시 결과 값으로 리턴될 때의 사용자가 보기에는 조금 어렵게 리턴이 되게 되기 때문에 결과 값을

            아래와 같이 가공이 필요로 함.

          - originList() 메서드는 간략하게 결과 값을 가공하기 위해 만든 별도의 메서드

 

 

 

   Docker Image 정보 확인 변형2

      - originList() 메서드는 처음이 결과 값보다는 보기가 편하지만 그래도 여전히 보기가 쉽지 않고 필요한 정보 뿐만 아니라,

        필요 없을 수 있는 모든 정보들에 대한 결과를 보여주기 때문에 아래와 같이 필요한 정보에 대해서만 간략하게 보여줄 수 있도록

        메서드를 작성하는 것이 좋음.

      - ImageList() 메서드는 Image ID와 Repo, Tags, Virtual Size 에 대한 값만을 보여주도록 가공하도록 작성한 별도의 메서드.

 

 

   Docker Container 생성

      - create_container() 메서드를 사용하여 Container를 생성

      - start() 메서드에 매개변수로 생성된 Container 객체를 포함하여, Container를 Running 상태로 만듬.

      - start() 메서드에 의해 생성된 Container가 정상적으로 동작하는지 확인하기 위해서, 해당 Container에서 동작 중인 웹서비스 호출

 

 

      - containers() 메서드를 사용하면, 현재 동작 중인 Container의 정보를 볼 수 있음.

           : docker ps 역할

 

      - 아래의 실행 결과 값은 마찬가지로 originList() 메서드를 사용하여 전체 정보를 보기 쉽도록 가공.

 

 

 

 

Posted by 네떡지기
분류없음2015.05.22 12:56

pyeapi, api, node, python, programmability : today Key


이번 포스팅은 지난 시간에 이어서, arista의 pyeapi에 대한 간략한 포스팅입니다.

pyeapi를 사용 시에 기본적으로 보게 된, 몇 가지의 코드 내용을 간략하게 알아봅니다.

별도로 구현부까지는 세부적으로 알아보지 않고, 각 주요 메서드에 대한 사용법과 설명만 하였습니다.

추후에 필요에 따라서 이렇게 주요 메서드에 대해서는 추가로 알아 볼 예정이며,

또한 물론 각 메서드를 사용한 코드와 동작 결과에 대한 예제도 함께 알아보겠습니다.


 


class Node(object): 

  

   def config(self, commands):

       ▷ commands는 String이나 List형으로 구성되나, String형은 내부적으로 List Type으로 다시 변경해서 처리된다.

       ▷ 실제 Command 실행은 run.commands 메서드를 사용

 


   def enable(self, commands, encoding='json', strict=False):

       ▷ Command는 List 형태로 전송

       ▷ 기존 Command 요청 형태는 json이며, json을 지원하지 않는 경우에는 text로 전송하도록 함

       ▷ strtict가 false 경우에는 json을 지원하지 않는 command에 대해서 text 방식으로 시도.

       ▷ Config 모드의 명령은 지원하지 않음.

       ▷ 실제 Command 실행은 run.commands 메서드를 사용

 

 

    def run_commands(self, commands, encoding='json'):

       ▷ 명령어를 전송하는 하위 계층의 메서드

       ▷ 일반적으로 직접 사용하지 않고, config나 enable 메서드를 통해 사용

       ▷ 실제 장비로 Command의 전송은 node 클래스의 멤버의 _connection의 execute 메서드 사용

           ※  _connection

                - connect_to 메서드 연결 시, Node 객체를 생성하게 되는데, Node 객체 초기화 시에

                 연결하고자 하는 node의 정보를 가지고 make_connection 메서드를 통해서 node와 연결할 객체를

                 eapi 연결 type에 따라서 socket, http_local, http, https EapiConnection을 호출

          

 

    def api(self, name, namespace='pyeapy.api'):

       ▷ name 매개변수를 통해서 API 모듈을 자동으로 Load

       ▷ 기본 namespace는 pyepai.api 이므로, api 내의 모듈 명만 써주면 됨.

       ▷ initialize 메서드와 instance 메서드에 확인하고, 해동 모듈을 리턴 함.

 

 

    def connect_to(name):

       ▷  매개변수의 name으로 node 정보가 있는 파일에서, 해당 node의 접속 정보(ip, id, pass 등)을 가지고 node 객체를 생성

 

Posted by 네떡지기
DevOps/Programmability2015.01.10 13:22

OnePK 예제

 


지난 포스팅에 이어서 Python을 사용한 OnePK 예제를 다뤄봅니다.

간략한 예제를 통해서, OnePK를 어떻게 사용할 수 있는지 알아보겠습니다.


 

 

○ OnePK 두 번째 예제

   - Network Element의 Interface 정보를 가져와서 출력해보는 예제입니다

   - Ethernet Type의 Interface 정보를 가져오고, 해당 Interface의 Description을 출력합니다

 

   ◆ 실행결과

 

 

   ◆ 소스코드

  

   - 기본 코드는 지난 포스팅인 Python for Networker Part 14(OnePK3)을 참고해주시면 됩니다.

   - Interface를 정보를 가져오기 위해서 OnePK에서 제공하는 Package중에, Interface라는 Package를 사용합니다.

   - 여기서는 NetworkInterface와 InterfaceFilter라는 Class를 사용합니다.

   - 현재 Element(Network Device)의 Interface 정보를 가져오기 위해서는 get_interface_list 메서드를 사용하게 됩니다.

   - get_interface_list 메서드를 사용하기 위해서는 InterfaceFilter를 지정해줘야 합니다

     InterfaceFilter를 지정하기 위해서, InterfaceFilter에 대한 객체를 생성하는 데

     InterfaceFilter의 객체 생성 시에는 NetworkInterface의 InterfaceTypes을 선택해야 합니다. (Default는 ONEP_IF_TYPE_ANY)

    - 코드 상에서 보면, InterfaceTypes를 사용하기 위해서 NetworkInterface Class의 InterfaceTypes라는 enum 멤버를

      intType이라는 변수에 할당하고, intType에서 Ethernet Type을 지정해서, intfilter라는 InterfaceFilter 객체를 생성합니다

      intfilter를 이용해서 원하는 Interface 리스트 정보를 가져옵니다. 

    - LIST형태로 리턴받은 NetworkInterface에서 하나씩 객체를 가져와서 Interface이름과 description을 출력한다.

    - descritpion의 경우에는 get_config() 메서드를 사용하여, InterfaceConfig 를 리턴받아서, InterfaceConfig의 메서드를 사용한다.

  

 

○ OnePK 두 번째 예제 변형-1

   - 위에서 출력한 Interface 정보를 보면, 인터페이스가 순번대로 반환되지 않기 때문에 0번 인터페이스부터 7번까지 차례대로

     출력되지 않는다.

   - 이를 해결하기 위해서 다음과 같이 코드를 한 줄 삽입하여 정렬을 하게 되면 아래의 두번째 예제 변형의 결과값처럼 차례대로

     인터페이스 정보를 출력할 수 있다.

  

 sortInt =  sorted(myInt,key=lambda intf: intf.name)

 

   ◆ 실행결과

 

 

○ OnPK 두 번째 예제 변형 -2

   - Description 이외에 추가적으로 필요한 정보는 OnePK 3번째 시간에서 얘기하였던, OnePK API에서 필요한 값을 찾아서,

    얼마든지 추가하여 정보를 알아낼 수 있다. 다음은 Interface의 상태가 Up/Down인지 확인한 내용까지 출력하였다.

 

   ◆ 실행결과

 

 

○ OnePK 세 번째 예제

   - OnePK 두 번째 예제처럼, Interface 정보를 가져올 수도 있지만, 실제 설정을 할 수 도 있다.

   - 다음은 Interface의 Description 정보를 변경한 간단한 예제이다. 

    

 

   - 위 코드의 실형결과를 보면, G0/6의 Interface의 Descritpion이 없다가 ex3.py를 실행하였을 때 설정이 되는 것을 확인하고

     다시 전체 인터페이스 정보를 출력해보면 G0/6에 정상적으로 Descritpion이 바뀐 것을 확인할 수 있다.

 

   ◆ 소스코드

         ※ 현재 포스팅된 Ex3의 예제는 결과값이 Sort를 다르게 써서, 조금 다릅니다. 변경 코드는 저녁에 이미지 교체 예정입니다

               이미지 교체 후에는 본 안내 메시지는 삭제할 예정입니다

 

   - NetwortInterface List 중에서 6번째(Index는 0부터 시작)의 Description을 set_description 메서드를 사용하여 변경합니다.

   - 변경 전/후로 Descritpion을 출력해서 결과를 확인합니다

 

 

◆ 이번 포스팅에서는 OnePK 2,3번째의 예제를 통해서 Network Element의 Interface에 대한 정보를 확인 및 설정하는 방법을

    알아 보았습니다.  2,3번 모두 기본 예제의 연장선상에 있으며 앞으로 다룰 예제들도 비슷할 것입니다

    결국 핵심은 예제가 아니라, 예제를 바탕으로 OnePK에서 제공하는 API를 잘 활용하는 방법과 아이디어가 될 것 같습니다.

 

 

Posted by 네떡지기

티스토리 툴바