Small Magento 2 API client that's ready to use and extend
Note: Currently only works in Node environment. But, it should be easy to make it compatible in browsers. Feel free to submit a merge request or contact me.
npm install magento2-api-wrapperAs a guest
const Magento2Api = require('magento2-api-wrapper')
var consumer = new Magento2Api({ api: { url: 'https://localhost' }})
consumer.get('directory/countries')
.then(data => console.log)
// or in async functions
var countries = await customer.get('directory/countries')As a admin/customer
// Api Keys: Magento Admin > System > Extensions > Integration
var admin = new Magento2Api({ api: {
url: 'https://localhost',
consumerKey: 'xxx',
consumerSecret: 'xxx',
accessToken: 'xxx',
tokenSecret: 'xxx',
}})
admin.get('products', {
params: {
searchCriteria: {
currentPage: 1,
pageSize: 1,
}
}
})
.then(data => console.log)Responses: Successfull response returns plain Magento data. Not wrapped as in Axios.
It provides all same methods as Axios: https://github.com/axios/axios#request-method-aliases
.axios: Axios- get axios instance.baseUrl: string- get base url.getStoreBaseUrl(storeCode: string): string- gets store scoped base url.request(config): Promise.get(url: string, config?: Object): Promise.delete(url: string, config?: Object): Promise.head(url: string, config?: Object): Promise.options(url: string, config?: Object): Promise.post(url: string, data?: Object, config?: Object): Promise.put(url: string, data?: Object, config?: Object): Promise.patch(url: string, data?: Object, config?: Object): Promise
Constructor Options
api.url:string- required - a baseUrl for magento instaceapi.consumerKey:string- (optional) - for authenticationapi.consumerSecret:string- (optional) - for authenticationapi.accessToken:string- (optional) - for authenticationapi.tokenSecret:string- (optional) - for authenticationaxios:Object- (optional) - extra Axios configuration. May be used for example to allow self-signed certificates
Method options
When executing any of the methods like .get, .post you may use theese extra
axios config options:
storeCode:string- setting storeCode will change base url so it's likehttps://example.org/rest/{storeCode}/V1/
Errors are thrown in same situations as in Axios. The error has extra property:
magento:Object- A Magento 2 Api instance
Adding interceptors works exactly same as in axios. Well, you'll add them to the axios instance directly, so the best would be to refer here to axios documentation: https://github.com/axios/axios#interceptors
const Magento2Api = require('magento2-api-wrapper')
var testApi = new Magento2Api({ api: { url: 'https://localhost' }})
testApi.axios.interceptors.response.use(function (data) {
// on successfull response
})const Magento2Api = require('magento2-api-wrapper')
const https = require('https')
var selfSignedApi = new Magento2Api({
api: { url: 'https://localhost' },
axios: {
httpsAgent: new https.Agent({
rejectUnauthorized: false
}),
}
})npm run test