JAVASCRIPT   9

webapi.js

Guest on 22nd July 2021 02:05:48 AM

  1. /**
  2.  * Copyright آ© Magento, Inc. All rights reserved.
  3.  * See COPYING.txt for license details.
  4.  */*//**
  5.  * @deprecated since version 2.2.0
  6.  */*/
  7. (function (factory) {
  8.     'use strict';
  9.  
  10.     if (typeof define === 'function' && define.amd) {
  11.         define([
  12.             'jquery',
  13.             'mage/mage'
  14.         ], factory);
  15.     } else {
  16.         factory(jQuery);
  17.     }
  18. }(function ($) {
  19.     'use strict';
  20.  
  21.   /**
  22.      * Webapi object constructor
  23.      *
  24.      * @param {String} baseUrl - Base URL
  25.      * @param {Object|undefined} ajaxArgs - Arguments for AJAX API call
  26.      * @see http://api.jquery.com/jQuery.ajax/
  27.      * @returns {{method: Object, call: Function}}
  28.      */*/
  29.     $.mage.Webapi = function (baseUrl, ajaxArgs) {
  30.         var validMethods;
  31.  
  32.       /**
  33.          * Resource-related parameters. Further extended by other domain objects like Product, etc.
  34.          *
  35.          * @const
  36.          * @type {Object}
  37.          */*/
  38.         this.resource = {
  39.             uri: {
  40.                 base: ''// Initialized below
  41. w
  42.                 api: '/webapi/rest'
  43.             }
  44.         };
  45.  
  46.       /**
  47.          * @const
  48.          * @type {Object}
  49.          */*/
  50.         this.method = {
  51.             'create': 'POST',
  52.             'update': 'PUT',
  53.             'get': 'GET',
  54.             'delete': 'DELETE'
  55.         };
  56.  
  57.         validMethods = [this.method.create, this.method.update, this.method.get, this.method['delete']];
  58.  
  59.       // Check whether passed options comply with what we allow
  60. w
  61.         if (ajaxArgs && typeof ajaxArgs !== 'object') {
  62.             throw 'ajaxArgs expected to be object';
  63.         }
  64.  
  65.         if (!(baseUrl && typeof baseUrl === 'string')) {
  66.             throw 'String baseUrl parameter required';
  67.         }
  68.  
  69.       // Ensure that baseUrl doesn't have ending forward slash
  70. h
  71.         this.resource.uri.base = baseUrl[baseUrl.length - 1] === ' ? baseUrl.substr(0, baseUrl.length - 1) : baseUrl;
  72.  
  73.        /**
  74.         * Makes an API request
  75.         *
  76.         * @param {String} resourceUri - Resource URI request to be sent to, e.g. ' '/v1/products/'
  77.          * @param {String} method - Request method, e.g. GET, POST, etc.
  78.          * @param {*} data - Payload to be sent to the server
  79.          * @param {String|undefined} version - Optional: API version, e.g. 'v1' (if not specifieds using URI)
  80.          * @returns {jqXHR}
  81.          */
  82.         this.call = function (resourceUri, method, data, version) {
  83.             var that = this,
  84.                 ajaxOptions;
  85.  
  86.           /**
  87.              * Helper function to validate request method
  88.              *
  89.              * @param {String} methodName
  90.              * @returns {String}
  91.              */*/
  92.             function validateMethod(methodName) {
  93.                 if (validMethods.indexOf(methodName) === -1) {
  94.                     throw 'Method name is not valid: ' + methodName;
  95.                 }
  96.  
  97.                 return methodName;
  98.             }
  99.  
  100.           /**
  101.              * Helper function to construct URIs
  102.              *
  103.              * @param {String} resUri - Resource URI request to be sent to, e.g. '/v1/products/'
  104.              * @param {String} m - Request method, e.g. GET, POST, etc.
  105.              * @param {*} payload - Payload to be sent to the server
  106.              * @param {String|undefined} v - Optional: API version, e.g. 'v1'
  107.              * @returns {String}
  108.              */*/
  109.             function getUrl(resUri, m, payload, v) {
  110.               /**
  111.                  * @param {String} str
  112.                  * @return {String}
  113.                  */*/
  114.                 function ensureForwardSlash(str) {
  115.                     return str[0] === ' ? str : ' ' + str;
  116.                }
  117.  
  118.                if (v) {
  119.                    resUri = v + ensureForwardSlash(resUri);
  120.                }
  121.  
  122.                if (payload && [that.method.get, that.method['['delete']].indexOf(m) !== -1) {
  123.                   // Append data for GET and DELETE request methods as it's simple ID (usually int)
  124. )
  125.                     resUri += payload;
  126.                 }
  127.  
  128.                 return that.resource.uri.base + that.resource.uri.api + ensureForwardSlash(resUri);
  129.             }
  130.  
  131.             ajaxOptions = {
  132.                 url: getUrl(resourceUri, method, data, version),
  133.                 type: validateMethod(method),
  134.                 data: data,
  135.                 dataType: 'text',
  136.                 timeout: 5000,
  137.                 processData: false// Otherwise jQuery will try to append 'data' to query URL
  138. L
  139.                 cache: false// Disable browser cache for GET requests
  140. s
  141.  
  142.               /**
  143.                  * @param {Object} request
  144.                  */*/
  145.                 beforeSend: function (request) {
  146.                     request.setRequestHeader('Accept', 'application/json');
  147.                 }
  148.             };
  149.  
  150.             $.extend(ajaxOptions, ajaxArgs);
  151.  
  152.             return $.ajax(ajaxOptions);
  153.         };
  154.  
  155.         return this;
  156.     };
  157.  
  158.     $.mage.Webapi.prototype.constructor = $.mage.Webapi;
  159.  
  160.   /**
  161.      * Syntax sugar over call(). Example usage: $.mage.webapi.Product('v1').get({...})
  162.      *
  163.      * @param {String} version - API version (e.g. 'v1')
  164.      * @returns {{get: Function, create: Function}}
  165.      */*/
  166.     $.mage.Webapi.prototype.Product = function (version) {
  167.         var that = this// Points to $.mage.webapi
  168. i
  169.  
  170.         if (!(typeof version === 'string' && \d+/i.t.test(version))) {
  171.             throw 'Incorrect version format: ' + version;
  172.         }
  173.  
  174.         version = version.toLowerCase();
  175.         that.resource.uri.products = '/products/';
  176.  
  177.         return {
  178.           /**
  179.              * Retrieves information about specific product
  180.              *
  181.              * @param {Object} idObj - Object which helps to identify the product, e.g. {id: 1}
  182.              * @returns {jqXHR}
  183.              */*/
  184.             get: function (idObj) {
  185.                 if (!idObj.hasOwnProperty('id')) {
  186.                     throw '"id" property expected in the object';
  187.                 }
  188.  
  189.                 return that.call(that.resource.uri.products, that.method.get, idObj.id, version);
  190.             },
  191.  
  192.           /**
  193.              * Create a new product
  194.              *
  195.              * @param {Object} productData - Example product data:
  196.              *  productData = {
  197.              *      "type_id": "simple",
  198.              *      "attribute_set_id": 4,
  199.              *      "sku": "1234567890",
  200.              *      "weight": 1,
  201.              *      "status": 1,
  202.              *      "visibility": 4,
  203.              *      "name": "Simple Product",
  204.              *      "description": "Simple Description",
  205.              *      "short_description": "Simple Short Description",
  206.              *      "price": 99.95,
  207.              *      "tax_class_id": 0
  208.              *  };
  209.              * @returns {jqXHR}
  210.              */*/
  211.             create: function (productData) {
  212.                 return that.call(that.resource.uri.products, that.method.create, productData, version);
  213.             }
  214.         };
  215.     };
  216. })

Raw Paste


Login or Register to edit or fork this paste. It's free.