|
1 class APIClient { |
|
2 constructor(baseURL) { |
|
3 this.baseURL = baseURL; |
|
4 } |
|
5 |
|
6 createRequest = (method, uri, data, headers) => { |
|
7 |
|
8 headers = headers || new Headers(); |
|
9 headers.append("Content-Type", "application/json"); |
|
10 |
|
11 var options = { |
|
12 method: method, |
|
13 headers: headers, |
|
14 }; |
|
15 |
|
16 if (data) { |
|
17 options.body = JSON.stringify(data); |
|
18 } |
|
19 |
|
20 // TODO : use URL-module to build URL |
|
21 return new Request(this.baseURL + uri, options); |
|
22 } |
|
23 |
|
24 createAuthorizedRequest = (method, uri, data) => { |
|
25 |
|
26 var headers = new Headers(), |
|
27 token = this.storage.get('token') || ''; |
|
28 headers.append("Authorization", "Bearer " + token); |
|
29 headers.append("Content-Type", "application/json"); |
|
30 |
|
31 return this.createRequest(method, uri, data, headers); |
|
32 } |
|
33 |
|
34 request = (method, uri, data) => { |
|
35 console.log(method + ' ' + uri); |
|
36 var req = this.model ? this.createAuthorizedRequest(method, uri, data) : this.createRequest(method, uri, data); |
|
37 return this.fetch(req, { credentials: 'include' }); |
|
38 } |
|
39 |
|
40 get = (uri, data) => { |
|
41 return this.request('GET', uri, data); |
|
42 } |
|
43 |
|
44 post = (uri, data) => { |
|
45 return this.request('POST', uri, data); |
|
46 } |
|
47 |
|
48 put = (uri, data) => { |
|
49 return this.request('PUT', uri, data); |
|
50 } |
|
51 |
|
52 fetch = (req) => { |
|
53 return new Promise((resolve, reject) => { |
|
54 fetch(req) |
|
55 .then((response) => { |
|
56 if (response.ok) { |
|
57 return response.json().then((data) => resolve(data)); |
|
58 } else { |
|
59 return response.json().then((data) => reject(data)); |
|
60 } |
|
61 }); |
|
62 }); |
|
63 } |
|
64 } |
|
65 |
|
66 export default APIClient |