2121use Phramework \JSONAPI \Client \Response \Resource ;
2222
2323/**
24- * Class API
2524 * @author Xenofon Spafaridis <[email protected] > 2625 * @since 0.0.0
2726 * @todo handle errors
2827 */
29- abstract class API
28+ abstract class Client
3029{
3130 /**
3231 * @var object|null
@@ -142,7 +141,18 @@ protected function prepareHeaders(\stdClass $additional = null)
142141 * )
143142 * );
144143 * ```
145- * @todo provide examples for all arguments
144+ * @example
145+ * ```php
146+ * $users = Users::get(
147+ * null,
148+ * null,
149+ * new Sort(null, 'created', false),
150+ * new Fields((object) [
151+ * 'user' => ['name', 'email']
152+ * ]),
153+ * new IncludeRelationship('project', 'group')
154+ * );
155+ * ```
146156 */
147157 public static function get (
148158 Page $ page = null ,
@@ -155,7 +165,7 @@ public static function get(
155165 ) {
156166 $ API = self ::getGlobalAPI ();
157167
158- $ url = $ API . static ::$ endpoint ;
168+ $ url = $ API . static ::$ endpoint . ' / ' ;
159169
160170 //prepare parts
161171
@@ -199,8 +209,6 @@ public static function get(
199209
200210 $ headers = static ::prepareHeaders ($ additionalHeaders );
201211
202- /*var_dump($url);*/
203-
204212 list (
205213 $ responseStatusCode ,
206214 $ responseHeaders ,
@@ -210,37 +218,86 @@ public static function get(
210218 self ::METHOD_GET ,
211219 $ headers
212220 );
213- /*
214- var_dump(
215- $responseStatusCode,
216- $responseHeaders,
217- $responseBody
218- );*/
219221
220222 $ collection = (new Collection ())->parse (
221223 $ responseBody
222224 );
223225
224- $ resource = (new Resource ())->parse (
225- $ responseBody
226- );
226+ $ collection ->setStatusCode ($ responseStatusCode );
227+ $ collection ->setHeaders ($ responseHeaders );
227228
228229 return $ collection ;
229-
230- //data
231- //include
232- //links
233- //meta
234230 }
235231
232+ /**
233+ * @param string $id Resource id
234+ * @param Fields|null $fields Fields directive
235+ * @param IncludeRelationship|null $include Include directive
236+ * @param \stdClass|null $additionalHeaders Will override global
237+ * headers
238+ * @param \string[] ...$additional Additional url
239+ * @return Resource
240+ * @throws Exception
241+ * @example
242+ * ```php
243+ * $user = User::getById(
244+ * '10',
245+ * null,
246+ * new IncludeRelationship('project', 'group')
247+ * )
248+ * ```
249+ */
236250 public static function getById (
237- $ id ,
251+ string $ id ,
238252 Fields $ fields = null ,
239253 IncludeRelationship $ include = null ,
240254 \stdClass $ additionalHeaders = null ,
241255 string ...$ additional
242256 ) {
257+ $ API = self ::getGlobalAPI ();
258+
259+ $ url = $ API . static ::$ endpoint . '/ ' . $ id . '/ ' ;
260+
261+ //prepare parts
262+ $ fieldsPart = ($ fields ? $ fields ->toURL () : '' );
263+ $ includePart = ($ include ? $ include ->toURL () : '' );
264+
265+ $ questionMark = false ;
266+
267+ //append parts
268+ if (!empty ($ fieldsPart )) {
269+ $ url = $ url . ($ questionMark ? '& ' : '? ' ) . $ fieldsPart ;
270+ $ questionMark = true ;
271+ }
272+
273+ if (!empty ($ includePart )) {
274+ $ url = $ url . ($ questionMark ? '& ' : '? ' ) . $ includePart ;
275+ $ questionMark = true ;
276+ }
277+
278+ //Append additional
279+ $ url = $ url . implode ('' , $ additional );
280+
281+ $ headers = static ::prepareHeaders ($ additionalHeaders );
282+
283+ list (
284+ $ responseStatusCode ,
285+ $ responseHeaders ,
286+ $ responseBody
287+ ) = static ::request (
288+ $ url ,
289+ self ::METHOD_GET ,
290+ $ headers
291+ );
292+
293+ $ resource = (new Resource ())->parse (
294+ $ responseBody
295+ );
296+
297+ $ resource ->setStatusCode ($ responseStatusCode );
298+ $ resource ->setHeaders ($ responseHeaders );
243299
300+ return $ resource ;
244301 }
245302
246303 public static function post (
0 commit comments