고객이 PHP 호출을해야하는 REST API를 제공했습니다. 그러나 실제로 API와 함께 제공된 설명서는 매우 제한되어 있으므로 실제로 서비스를 호출하는 방법을 모르겠습니다.
Google에 시도했지만 이미 만료 된 것은 Yahoo! 서비스 호출 방법에 대한 자습서. 헤더 또는 깊이있는 정보는 언급하지 않았습니다.
REST API를 호출하는 방법에 대한 적절한 정보 또는 이에 대한 문서가 있습니까? W3schools에서도 SOAP 방법 만 설명합니다. PHP에서 rest API를 만들기위한 다른 옵션은 무엇입니까?
답변
PHPs cURL
Extension으로 모든 REST API에 액세스 할 수 있습니다 . 그러나 API 문서 (메서드, 파라미터 등)는 고객이 제공해야합니다!
예:
// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value
function CallAPI($method, $url, $data = false)
{
$curl = curl_init();
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// Optional Authentication:
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
답변
URL이 있고 PHP가 지원하는 경우 file_get_contents를 호출하면됩니다.
$response = file_get_contents('http://example.com/path/to/api/call?param1=5');
$ response가 JSON 인 경우 json_decode를 사용하여 PHP 배열로 변환하십시오.
$response = json_decode($response);
$ response가 XML 인 경우 simple_xml 클래스를 사용하십시오.
$response = new SimpleXMLElement($response);
http://sg2.php.net/manual/en/simplexml.examples-basic.php
답변
Guzzle을 사용하십시오 . “HTTP / 1.1로 작업하기 쉽고 웹 서비스 소비로 인한 고통을 덜어주는 PHP HTTP 클라이언트입니다.” cURL을 사용하는 것보다 Guzzle을 사용하는 것이 훨씬 쉽습니다.
다음은 웹 사이트의 예입니다.
$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', [
'auth' => ['user', 'pass']
]);
echo $res->getStatusCode(); // 200
echo $res->getHeader('content-type'); // 'application/json; charset=utf8'
echo $res->getBody(); // {"type":"User"...'
var_export($res->json()); // Outputs the JSON decoded data
답변
CURL은 가장 간단한 방법입니다. 간단한 전화입니다
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "THE URL TO THE SERVICE");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, POST DATA);
$result = curl_exec($ch);
print_r($result);
curl_close($ch);
답변
HTTPFUL 사용
Httpful은 말하는 HTTP를 제정신으로 만들기위한 단순하고 체인 가능하며 읽을 수있는 PHP 라이브러리입니다. 개발자는 curl set_opt 페이지를 선별하는 대신 API와의 상호 작용에 집중할 수 있으며 이상적인 PHP REST 클라이언트입니다.
Httpful 포함 사항 …
- 읽을 수있는 HTTP 메소드 지원 (GET, PUT, POST, DELETE, HEAD 및 OPTIONS)
- 맞춤 헤더
- 자동 “스마트”구문 분석
- 자동 페이로드 직렬화
- 기본 인증
- 클라이언트 측 인증서 인증
- “템플릿”요청
전의.
GET 요청을 보내십시오. 자동으로 파싱 된 JSON 응답을받습니다.
라이브러리는 응답에서 JSON Content-Type을 확인하고 응답을 기본 PHP 객체로 자동 구문 분석합니다.
$uri = "https://www.googleapis.com/freebase/v1/mqlread?query=%7B%22type%22:%22/music/artist%22%2C%22name%22:%22The%20Dead%20Weather%22%2C%22album%22:%5B%5D%7D";
$response = \Httpful\Request::get($uri)->send();
echo 'The Dead Weather has ' . count($response->body->result->album) . " albums.\n";
답변
호출하는 REST API가 또는를 지원 GET
하는지 POST
또는 두 가지 방법을 모두 알아야 합니다. 아래 코드는 저에게 맞는 것입니다. 내 웹 서비스 API를 호출하고 있으므로 API가 무엇을 가져오고 무엇을 반환할지 이미 알고 있습니다. GET
와 POST
메소드를 모두 지원 하므로 덜 민감한 정보는로 들어가고 URL (GET)
username 및 password와 같은 정보는 POST
변수 로 제출됩니다 . 또한 모든 것이 HTTPS
연결을 통과합니다 .
API 코드 내에서 json 형식으로 반환하려는 배열을 인코딩 한 다음 단순히 PHP 명령 echo $my_json_variable
을 사용하여 해당 json 문자열을 클라이언트에서 사용할 수있게하십시오.
보시다시피, 내 API는 json 데이터를 반환하지만 API의 응답 형식이 무엇인지 알아야합니다 (또는 반환 된 데이터를 확인해야 함).
이것이 클라이언트 측에서 API에 연결하는 방법입니다.
$processed = FALSE;
$ERROR_MESSAGE = '';
// ************* Call API:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.myapi.com/api.php?format=json&action=subscribe&email=" . $email_to_subscribe);
curl_setopt($ch, CURLOPT_POST, 1);// set post data to true
curl_setopt($ch, CURLOPT_POSTFIELDS,"username=myname&password=mypass"); // post data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
// returned json string will look like this: {"code":1,"data":"OK"}
// "code" may contain an error code and "data" may contain error string instead of "OK"
$obj = json_decode($json);
if ($obj->{'code'} == '1')
{
$processed = TRUE;
}else{
$ERROR_MESSAGE = $obj->{'data'};
}
...
if (!$processed && $ERROR_MESSAGE != '') {
echo $ERROR_MESSAGE;
}
BTW, 나는 또한 file_get_contents()
여기에 제안 된 일부 사용자가 방법 을 사용하려고 했지만 그다지 잘 작동하지 않습니다. curl
방법이 더 빠르고 안정적 이라는 것을 알았습니다 .
답변
실제로 많은 고객이 있습니다. 그들 중 하나는 해충입니다 -이것을 확인하십시오. 그리고 이러한 REST 호출은 GET, POST, PUT 및 DELETE 등 다양한 방법으로 간단한 http 요청입니다.
