개발새발 박스/PHP

PHP 에서 API 연동은 어떻게 해요? - cURL 을 이용한 API 연동 방법!

업폰 2023. 7. 6. 15:10
반응형

오랜만입니다!

모두 판하! 판하!

 

오랜만에 글을 쓰려고 찾았는데 6월에 글이 1건도 없었네요?

 

머리 박고 있겠습니다.

 


 

아무튼 오늘은 어떤 일로 글을 쓰는가!?

 

사실 글을 쓰는 대부분은 제가 아래와 같은 상황입니다.

 

본인의 시행착오를 통한 해결법

 

때문에 분석/수정 당시 시스템 내의 충돌이나 스펙 제반사항 들로 인해 현재 시스템 적용 불가능 같은 이슈가 발생시 아예 기획 의도와 달라지기도 하죠.

 

꼭 필요한 부분은 얘기가 다르지만요.

 

아무튼 이건 제가 실 수할 일도 없을 뿐더러 너무 익숙한 작업인데, 글을 쓰게 되었네요.

사실 비슷한 케이스들로는 통짜로 특정 업체의 연동 API를 라이브러리화 하여 글을 작성하지요.

 

예를 들어 이 글처럼요.

 

 

Nest.js 로 NICE API 처리하기!

일단 여러분들에게 제가 했던 고생을 하지 않아도 되도록 설명을 드릴 예정인데요. 다들 준비 되셨죠? 먼저 왜 이 작업을 했는가? 라는 부분을 설명해야할 것 같다. 이번 클라이언트의 작업은 Nic

up4n.tistory.com

 


 

아무튼 php에서의 기본적인 API 는 curl 라이브러리를 이용하여 합니다.

 

curl은 사실 cURL / Client URL 인데, 명칭처럼 클라이언트를 url로 접근할 수 있게 해는 프로토콜 함수이다.

굉장히 오래이어져온 라이브러리로 C 언어로 개발된 프로토콜이라는데, 그거까지 우리가 알 필요는 없고,

 

다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구를 제공한다.

 

정도만, 알아두면 되고 이 라이브러리가 PHP에서도 제공된다는 사실을 알면 된다.

그럼 php crul을 검색하여, PHP 메뉴얼에서 정보를 검색해볼 수 있으니까 말이다.

 

아무튼 여러분이 궁금한 건 이런 제반지식보다 어떻게 사용하는지가 궁금할텐데, 일반적인 curl 사용법은 아래와 같습니다.

 

// API 기본 Struct 함수
function curl_API($url, $header, $method = "POST", $data){
	// 매개변수 정리
	$ch = curl_init();

	if(strtoupper($method) == "POST"){
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	}else if(strtoupper($method) == "GET")
		$url .= "?".$data;

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	if($header)
		curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

	$response = curl_exec ($ch);
	$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

	curl_close ($ch);
	
	if($status_code == 200){
		// 성공적인 통신

		return $response;
	}else{
		// 실패

		return false;
	}
}

 

예시의 함수는 기본적으로 url / header / data를 통한 통신으로 응답을 받아 응답을 반환하는 함수입니다.

(제 입맛에 맞춰 짠 커스텀 함수이기 때문에 필요한 함수들은 수정하여 사용 하시기 바랍니다.)

 

이 함수를 그대로 써도 되지만, 이 함수를 기본으로 여러 바리에이션을 만들어 해당 바리에이션에서 이 함수를 호출하여 사용됩니다.

이렇게 말이지요.

 

// 함수로 제작시
// 예를 들어 어떤 명령을 하는 api이고, 요청은 어떤 명령을 하고
// 수치가 어떻게 되는지 요청하며, 응답은 true / false가 온다.
function send_cash($target, $value){
    // 데이터형태는 크게 get / post 냐에 따라 다를 수 있고, 
    // 해당 서비스의 개발 환경에 따라 차이가 날 수 있다.
    $arrTemp = array();

    $arrTemp['key'] = $this->key;
    $arrTemp['action'] = "입금";
    $arrTemp['target'] = $target;
    $arrTemp['value'] = $value;

    // json 형태의 데이터를 전달
    $jsondata = json_encode($arrTemp);
    $data['reqData'] = $jsondata;

    $response = curl_API($this->url, "", "POST", $data);

    // 아마 데이터를 json으로 전달시 받는 데이터도 json일 것
    return json_decode($response);
}

if( send_cash("홍길동", 20000) )
	echo "성공!";
else
	echo "실패!";

 

다만 실제 사용되는 API들은

 1) 보안을 위해 토큰을 주고 받는 작업이 선행되어...

 이 토큰의 유효기간이 있어 기간동안은 동일한 토큰을 사용하고, 유효기간이 끝나면, 재발급하는 식의 작업이 필요하기도 하며,

 2) 특정 키값을 직접 유지하여 고유 키값(겹치지 않는 특정한 값)을 전달해야하기도 하거나

 3) 서로의 약속된 보안체계에 따라 고유 값을 이용해 토큰을 서로 생산하여 비교하기도 하지요.

 

그 외 다양한 방법들이 있겠지만, 결국 모든 통신은 위의 curl 같은 통신소켓 함수를 통해 진행됩니다.

javascript 에는 XMLHttpRequest() 와 같은 함수가 이에 속하겠지요.

 

또한, 위과 같은 웹 API를 제공하지 않는 API들은 고유한 내장모듈을 설치하여 연동되는 경우도 있습니다.

보통 API를 제공하는 업체 입장에선 다양한 연동 방식을 제공해야지 더 많은 고객들이 문제 없이 연동할 수 있다는 것이 요점입니다.

 

이는 나중에 API에 대한 정의 등을 정리하여 안내 드리겠습니다.

 

 

아무튼 위와 같은 내용들이 여러분께 도움이 되길 바라며, 혹시 궁금한 점이 있다면 댓글 부탁드립니다.

 

감사합니다.

반응형

'개발새발 박스 > PHP' 카테고리의 다른 글

OAuth 서버 만들기  (0) 2023.08.04
cURL, CURLOPT_POSTFIELDS 의 고찰  (0) 2023.07.28