- 작성시간 : 2018/05/02 15:23
- 퍼머링크 : mcchae.egloos.com/11294882
- 덧글수 : 0
굳이 언급을 하지 않더라도, 최근에는 RESTful API 가 대세입니다.





프런트엔드와 백엔드를 나누는 관문이라고 할 수도 있겠습니다.
그 이전에 물론 SOAP, WebService 등이 있었기는 했었지요.
더 거슬러 올라가면 RPC (Remote Procedure Call) 까지 가기는 합니다.
뭐 아직도 파이썬 기본 라이브러리에 XMLRPC가 존재하는 것은 당연한 것이기도 하겠지요.
암튼 최근에 PHP API 서비스 서버가 있다고 가정하고 파이썬 Client를 작성해 보았습니다.
PHP를 마지막으로 사용한 것이 십년도 훨씬 더 되어 많이 까먹었지만,
그 가락은 거의 유사할 것입니다.
api.php : API 서비스 샘플 코드
api_test.py : API unittest python 샘플 코드
api_uril.py : request 를 이용한 래핑 클래스 등의 유틸 함수
세 개의 파일 입니다.
우선 api.php 파일은 다음과 같이 php가 설치된 곳에서 기동 시켰습니다.
php -S localhost:8888 api.php
그리고 파이썬 코드는
python api_test.py
하고 동작시키면,

위와 같이 여러 개의 함수를 테스트 하고,
그 결과가 'OK'라고 나오면 단위 테스트에 성공한 것입니다.
다음은 아주 간단한 함수 두 개만 확인을 해 보겠습니다.

파이썬에서 http://localhost:8888/api.php/ping 으로 GET HTTP 메서드로 호출하면,

PHP 코드에서는
{
'http_method': 'GET',
'method': 'ping',
'success': True,
'timestamp': 1525240789
}
와 같은 JSON을 만들어 던지는데,
다시 파이썬에서 timestamp를 받아 그 결과를 출력하니,
Server Time: 2018-05-02T14:59:49
라는 것입니다.
이제는 클라이언트에서 JSON으로 HTTP POST 메서드를 이용하여 호출하는 방식입니다.
파이썬에서

라고 호출하였습니다.
p_json에 JSON 개체를 만들고 'user_id'와 'password'를 넣어 POST로 호출하였습니다.
그러면 api.php에서는

라고 하고,
{
'input': <= 이곳에는 호출한 JSON을 그대로 넣어 보았습니다. (마음대로 필요한 것으로 대치 하면 되겠지요?)
'success': true
}
와 같이 만들어 보냈고,
파이썬에서 다시 받은 결과는
{
'input': {
'password': '4491b05113f27a8be79efd4742e751655baec099dfc1300e59bd668fdd92e303',
'user_id': 'admin'},
'success': True
}
와 같이 잘 받았습니다.
다른 샘플 API도 모두 동일합니다.
물론 full RESTful 로 설계를 한다면,
좀 더 리소스 기반으로 설계를 해야 되겠지요.
이것으로 만약 PHP 서버이고 Python Client 일 때
이용할 수 있는 간단한 샘플을 만들어 보았습니다.
어느 분께는 도움이 되셨기를...
덧글