22
33namespace OpenApi ;
44
5- class Client
5+ /**
6+ * Generic HTTP client for OpenAPI services
7+ * Handles REST operations with Bearer token authentication
8+ */
9+ class Client
610{
711 private string $ token ;
812
13+ /**
14+ * Initialize client with Bearer token
15+ */
916 public function __construct (string $ token )
1017 {
1118 $ this ->token = $ token ;
1219 }
1320
21+ /**
22+ * Execute HTTP request
23+ *
24+ * @param string $method HTTP method (GET, POST, PUT, DELETE, PATCH)
25+ * @param string $url Target URL
26+ * @param mixed $payload Request body (for POST/PUT/PATCH)
27+ * @param array|null $params Query parameters (for GET) or form data (for other methods)
28+ * @return string Response body
29+ */
1430 public function request (string $ method , string $ url , mixed $ payload = null , ?array $ params = null ): string
1531 {
32+ // Append query parameters for GET requests
1633 if ($ params && $ method === 'GET ' ) {
1734 $ url .= '? ' . http_build_query ($ params );
1835 }
1936
2037 $ ch = curl_init ();
21-
38+
2239 curl_setopt_array ($ ch , [
2340 CURLOPT_URL => $ url ,
2441 CURLOPT_RETURNTRANSFER => true ,
@@ -30,12 +47,14 @@ public function request(string $method, string $url, mixed $payload = null, ?arr
3047 ]
3148 ]);
3249
50+ // Add JSON payload for POST/PUT/PATCH requests
3351 if ($ payload && in_array ($ method , ['POST ' , 'PUT ' , 'PATCH ' ])) {
3452 curl_setopt ($ ch , CURLOPT_POSTFIELDS , is_string ($ payload ) ? $ payload : json_encode ($ payload ));
3553 }
3654
55+ // Add form data for non-GET requests
3756 if ($ params && $ method !== 'GET ' ) {
38- curl_setopt ($ ch , CURLOPT_POSTFIELDS ,
57+ curl_setopt ($ ch , CURLOPT_POSTFIELDS ,
3958 is_string ($ params ) ? $ params : http_build_query ($ params ));
4059 }
4160
@@ -44,37 +63,54 @@ public function request(string $method, string $url, mixed $payload = null, ?arr
4463 $ error = curl_error ($ ch );
4564 curl_close ($ ch );
4665
66+ // TODO: Provide more graceful error message with connection context (timeout, DNS, SSL, etc.)
4767 if ($ response === false ) {
4868 throw new Exception ("cURL Error: " . $ error );
4969 }
5070
71+ // TODO: Parse response body and provide structured error details (error code, message, request ID)
5172 if ($ httpCode >= 400 ) {
5273 throw new Exception ("HTTP Error {$ httpCode }: " . $ response );
5374 }
5475
5576 return $ response ;
5677 }
5778
79+ /**
80+ * Perform GET request
81+ */
5882 public function get (string $ url , ?array $ params = null ): string
5983 {
6084 return $ this ->request ('GET ' , $ url , null , $ params );
6185 }
6286
87+ /**
88+ * Perform POST request
89+ */
6390 public function post (string $ url , mixed $ payload = null ): string
6491 {
6592 return $ this ->request ('POST ' , $ url , $ payload );
6693 }
6794
95+ /**
96+ * Perform PUT request
97+ */
6898 public function put (string $ url , mixed $ payload = null ): string
6999 {
70100 return $ this ->request ('PUT ' , $ url , $ payload );
71101 }
72102
103+ /**
104+ * Perform DELETE request
105+ */
73106 public function delete (string $ url ): string
74107 {
75108 return $ this ->request ('DELETE ' , $ url );
76109 }
77110
111+ /**
112+ * Perform PATCH request
113+ */
78114 public function patch (string $ url , mixed $ payload = null ): string
79115 {
80116 return $ this ->request ('PATCH ' , $ url , $ payload );
0 commit comments