CMS API
Om requests naar de API af te handelen is een standaard request handler gemaakt.
Deze is te vinden in: /api/default/request-handler.js
Deze handler wordt o.a. gebruikt om de site en categorie data op te halen.
Je geeft een endpoint, type request en de eventuele post-data mee.
Example
requesthandler
import {Cms} from '../index';
const HTTP_METHOD_GET = "GET";
const HTTP_METHOD_POST = "POST";
const CONTENT_TYPE_JSON = "application/json";
function containsContentWithType(response, expectedContentType) {
const contentTypeHeader = response.headers.get("Content-Type");
return contentTypeHeader?.indexOf(expectedContentType) > -1;
}
export default {
executeRequest(endPoint, method, data = null) {
const url = Cms.$apiBaseUrl + endPoint;
const request = this.createRequestInfo(method, data);
return fetch(url, request)
.catch(this.handleRequestError)
.then(response => {
if (!response)
return Promise.reject();
// Handle error response status (non-2xx status code).
if (!response.ok) {
// No json data in response -> reject with status code only.
if (!containsContentWithType(response, CONTENT_TYPE_JSON))
return Promise.reject({ status: response.status });
// Json data in response -> reject with status code and response data.
return response
.json()
.then(data => Promise.reject({ status: response.status, data: data }));
}
// Handle success response status.
// Store authorization tokens from response.
const cmsAuthToken = response.headers.get("SetAuthorization");
if (cmsAuthToken)
{
Cms.$cookies.set('cmsAuthToken', `Bearer ${cmsAuthToken}`);
Cms.$store.commit('SiteStore/setCmsAuthToken', `Bearer ${cmsAuthToken}`);
}
// Return the json content of the response, if there is any.
if (containsContentWithType(response, CONTENT_TYPE_JSON))
return response.json();
});
},
createRequestInfo(method, data) {
const request = {
method: method,
headers: {}
};
const token = Cms.$store.getters['SiteStore/getCmsAuthToken'];
if (token)
request.headers['Authorization'] = token;
const hash = Cms.$store.getters['SiteStore/getPretendDate']?.hash;
if (hash != null)
request.headers['PretendHash'] = hash;
if (data) {
request.headers['Content-Type'] = CONTENT_TYPE_JSON;
request.body = JSON.stringify(data);
}
return request;
},
handleRequestError(error) {
if(error) {
console.error('REQUEST ERROR', `${error}`, '|', error.response || error.code || error.status);
return Promise.reject(error.response || error.code || error.status);
}
console.error('REQUEST ERROR WITHOUT ERROR OBJECT');
},
get(endPoint, query) {
if (query == null)
query = '';
else if (typeof query === 'object') {
let result = '';
for (let prop in query)
result += `&${prop}=${encodeURIComponent(query[prop])}`;
query = result.length ? '?' + result.substr(1) : '';
}
else
query = '?' + query;
if (query === '?')
query = '';
const url = `${endPoint}${query}`;
return this.executeRequest(url, HTTP_METHOD_GET);
},
post(endPoint, body) {
const url = `${endPoint}`;
return this.executeRequest(url, HTTP_METHOD_POST, body);
}
};