Rest API 요청 언어별 정리
Rest API 호출 방식 소스코드를 각 언어 별로 정리해보았다.
무엇을 좋아할지 몰라 잔뜩 준비 했으니 쓸모가 있었으면 좋겠다.
준비한 언어 목록은 다음과 같다.
- 목록 -
1. CURL
2. PHP
3. PYTHON
4. C/C++
5. QT
6. JAVA
7. Node.js
# 소스코드
- 각각의 요청은 http://httpbin.org/get 를 대상으로한다.
- GET method 한정하여 작성. 코드 내 POST로 변경할 수 있는 요소들이 있으니 필요하면 수정해서 사용할 것.
- 모든 request의 response 응 동일하기 때문에 가장 아래에 응답 결과로 정리한다.
1. CURL
- OS: Ubuntu 16.04.7 LTS, Version: curl 7.79.1
curl -H "Content-Type: application/json" -X GET http://httpbin.org/get
2. PHP
- OS: Ubuntu 16.04.7 LTS, Version: PHP 7.0.33-0ubuntu0.16.04.16 (cli) ( NTS )
<?php
// 1. Method 타입을 정의하고 장치에 요청할 URI를 입력한다.
$is_method_post = false;
$str_url = "http://httpbin.org/get";
$arr_headers = array(
"Content-type : application/json"
);
// 2. API를 전송한다.
$curl_handler = curl_init();
curl_setopt($curl_handler, CURLOPT_URL, $str_url);
curl_setopt($curl_handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handler, CURLOPT_HTTPHEADER, $arr_headers);
curl_setopt($curl_handler, CURLOPT_POST, $is_method_post);
$str_response = curl_exec($curl_handler);
curl_close($curl_handler);
echo json_encode(json_decode($str_response), JSON_PRETTY_PRINT) . "\n";
?>
3. PYTHON
- OS: Ubuntu 16.04.7 LTS, Version: Python 3.5.2
import requests
import json
import pprint
# 1. 장치에 요청할 URI를 입력한다.
str_url = "http://httpbin.org/get"
arr_headers = { "Content-Type" : "application/json" };
# 2. Method 타입을 정의하고 API를 전송한다.
str_response = requests.get(str_url, headers=arr_headers)
pprint.pprint(json.loads(str_response.text), indent=2)
4. C/C++
- OS: Ubuntu 16.04.7 LTS, Version: g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0
#include <curl/curl.h>
#include <iostream>
#include <string>
using namespace std;
size_t write_callback(void *_contents, size_t _size, size_t _nmemb, void *_userp) {
((string *)_userp)->append((char *)_contents, _size * _nmemb);
return _size * _nmemb;
}
int main(int _argc, char *_argv[]) {
CURL *curl_handle;
CURLcode curl_ret_code;
string read_buffer;
struct curl_slist *t_headers;
curl_handle = curl_easy_init();
// 1. 장치에 요청할 URI를 입력한다.
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://httpbin.org/get");
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &read_buffer);
curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, t_headers);
// 2. HTTP 공용/인증 헤더의 KEY/VALUE를 입력한다.
t_headers = curl_slist_append(t_headers, "Content-Type : application/json");
// 3. API를 전송한다. (기본 GET)
read_buffer = "";
curl_ret_code = curl_easy_perform(curl_handle);
if( curl_ret_code != CURLE_OK ) {
read_buffer = string(curl_easy_strerror(curl_ret_code));
}
cout << read_buffer << endl;
return 0;
}
5. QT
- OS: Windows 10, Version: c++11, QT 5.12.10
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QJsonObject>
#include <QJsonDocument>
#include <QLabel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
request();
label = new QLabel(this);
this->setCentralWidget(label);
label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::request()
{
// 1. 장치에 요청할 URI를 입력한다.
QUrl url(QString("http://httpbin.org/get"));
QNetworkRequest request(url);
request.setRawHeader("Content-Type", "application/json");
// 2. API를 전송한다.
QNetworkAccessManager *manager= new QNetworkAccessManager(this);
QNetworkReply *reply = manager->get(request);
// 3. 리턴값을 받았을 때 처리할 함수를 연결한다.
connect(reply, SIGNAL(readyRead()), this, SLOT(readyRead()));
}
void MainWindow::readyRead()
{
qDebug() << __PRETTY_FUNCTION__;
auto repl = qobject_cast<QNetworkReply *>(sender());
QByteArray data = repl->readAll();
QJsonDocument doc = QJsonDocument::fromJson(data);
label->setText(doc.toJson(QJsonDocument::Indented));
}
6. JAVA
- OS: Ubuntu 16.04.7 LTS, Version: openjdk version "1.8.0_292"
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Test {
public static void main(String[] _args) throws Exception {
// 1. 장치에 요청할 URI를 입력한다.
URL url = new URL("http://httpbin.org/get");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestProperty("Content-Type", "application/json");
// 2. Method 타입을 정의하고 API를 전송한다.
con.setRequestMethod("GET");
con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
}
7. Node.js
- OS: Ubuntu 16.04.7 LTS, Version: nodejs v6.9.2
const request = require('request');
let options = {
// 1. Method 타입을 정의하고 장치에 요청할 URI를 입력한다.
uri : "http://httpbin.org/get",
method : "GET",
headers : {
"Content-Type" : "application/json",
},
json : true
};
// 2. API를 전송한다.
request(options, function(_err, _response, _body) {
console.log(_body);
return ;
})
# 응답 결과
- 모두 request 는 동일한 서버로 발생하기 때문에 response 또한 같다.
{
"args": {},
"headers": {
"Accept": "*/*",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.79.1",
"X-Amzn-Trace-Id": "Root=1-61e4c4e8-52b38b0d2ed212606ff49814"
},
"origin": "218.159.195.251",
"url": "http://httpbin.org/get"
}
정리할 땐 뭔가 많았는데 써 놓고 보니 별거 없어 보인다.
그래도 샘플 코드가 필요한 분들에게 도움이 되길 바란다.
끝.
'IT > programming' 카테고리의 다른 글
[JAVA] 클래스와 메서드 설명 (0) | 2022.01.18 |
---|---|
[C/C++] C++ JSON parser example, C언어 JSON 파서 예제, rapidjson (2) | 2022.01.17 |
[C/C++] C언어 MAC 주소 읽기 구현, get mac address (0) | 2022.01.16 |
[C/C++] select 를 활용한 non-block I/O, FD_SET, FD_ISSET (0) | 2022.01.14 |
[C/C++] 전역 네임스페이스, 시스템 함수와 동일한 클래스 메서드 이름 사용 방법 (0) | 2022.01.14 |
댓글