-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApiBase.php
144 lines (127 loc) · 4.58 KB
/
ApiBase.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
/**
* GitLabAPI操作基底クラス
*
* @version 2013/09/16 yuichisuzuki
* @since 2013/09/16
* @author yuichisuzuki
* @copyright (C)2013 yuichisuzuki
*/
class GLU_ApiBase {
// ------------------------------------------------------------------------------------
// 非公開部
// ------------------------------------------------------------------------------------
const HTTP_REQUEST_METHOD_GET = 'GET';
const HTTP_REQUEST_METHOD_POST = 'POST';
const HTTP_REQUEST_METHOD_PUT = 'PUT';
const HTTP_REQUEST_METHOD_DELETE = 'DELETE';
/** @var $_baseUrl string 基底URL */
private $_baseUrl;
/** @var $_privateToken string アクセストークン */
private $_privateToken;
/**
* リクエストURL作成メソッド
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @param string $method メソッド名
* @return string URL
*/
private function _createUrl($endpoint, $params, $method) {
$query = '?private_token=' . $this->_privateToken . '&per_page=100';
if ($method == self::HTTP_REQUEST_METHOD_GET) {
$query .= '&' . http_build_query($params);
}
return "$this->_baseUrl$endpoint$query";
}
/**
* APIにリクエストを送るメソッド
* HTTP_RequestクラスだとPHP5.4環境でSTRICTが表示されるため独自にcURLで作成
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @param string $method メソッド名
* @return array APIの戻り値
*/
private function _sendRequest($endpoint, $params, $method) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->_createUrl($endpoint, $params, $method));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json',));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
if ($method == self::HTTP_REQUEST_METHOD_POST) {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, self::HTTP_REQUEST_METHOD_POST);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
} elseif ($method == self::HTTP_REQUEST_METHOD_PUT) {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, self::HTTP_REQUEST_METHOD_PUT);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
} elseif ($method == self::HTTP_REQUEST_METHOD_DELETE) {
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, self::HTTP_REQUEST_METHOD_DELETE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
}
$responseBody = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
return array('response' => json_decode($responseBody), 'status' => $statusCode);
}
// ------------------------------------------------------------------------------------
// 非公開部
// ------------------------------------------------------------------------------------
/**
* コンストラクタ
*
* @param string $baseUrl 基底URL
* @param string $privateToken アクセストークン
* @return return_type
*/
public function __construct($baseUrl, $privateToken) {
$this->_baseUrl = $baseUrl;
$this->_privateToken = $privateToken;
}
/**
* booleanをstring型に変換するメソッド
*
* @param bool $bool bool型の値
* @return string
*/
protected function bool2String($bool) {
return ($bool === true) ? "1" : "0";
}
/**
* GETリクエスト送信メソッド
*
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @return array APIの戻り値
*/
protected function get($endpoint, $params = array()) {
return $this->_sendRequest($endpoint, $params, 'GET');
}
/**
* POSTリクエスト送信メソッド
*
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @return array APIの戻り値
*/
protected function post($endpoint, $params = array()) {
return $this->_sendRequest($endpoint, $params, 'POST');
}
/**
* PUTリクエスト送信メソッド
*
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @return array APIの戻り値
*/
protected function put($endpoint, $params = array()) {
return $this->_sendRequest($endpoint, $params, 'PUT');
}
/**
* DELETEリクエスト送信メソッド
*
* @param string $endpoint エンドポイントのディレクトリ名
* @param array $params URLパラメータ
* @return array APIの戻り値
*/
protected function delete($endpoint, $params = array()) {
return $this->_sendRequest($endpoint, $params, 'DELETE');
}
}