API Connect

API Connect

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
  • 1.  validating path and query parameters

    Posted Wed May 31, 2023 04:30 AM

    A customer of mine wanted to validate the path and query parameter format based on the swagger definition. In order to achieve this I wrote a little code (that doesn't validate all data types yet but can be easiliy extended)
    The requirements are as follows
    - read swagger of API definition (this means we always need to parse the swagger which does have a performance impact)
    - have the same piece of code that can be wrapped in a user defined policy easiliy for all APIs 



    ------------------------------
    Tom van Oppens
    ------------------------------


  • 2.  RE: validating path and query parameters
    Best Answer

    Posted Wed May 31, 2023 04:34 AM
    context.swagger.readAsJSON(function (error, schema) {
    if (error) {
    console.error("error reading swagger: " + error);
    } else {
    console.log(Number.isInteger(1));
    schema.paths[context.get("api.operation.path")].parameters.forEach((x) => {
    console.log(x);
    switch (x.type) {
    //maybe add try catch to fill body as wanted
    case "float":
    case "double":
    if (
    isNumeric(context.get(`request.parameters.${x.name}.values`)[0])
    ) {
    context.set("message.body", "true");
    }else{
    throw new RangeError("Parameter" + x.name + " is not of the type " + x.type);
    }
    case "integer":
    if (
    isInteger(context.get(`request.parameters.${x.name}.values`)[0])
    ) {
    context.set("message.body", "true");
    }else{
    throw new RangeError("Parameter" + x.name + " is not of the type " + x.type);
    }
    //set error
    //break apic assembly
    break;
    case "boolean":
    if (
    isInteger(context.get(`request.parameters.${x.name}.values`)[0])
    ) {
    context.set("message.body", "true");
    }else{
    throw new RangeError("Parameter" + x.name + " is not of the type " + x.type);
    }
    //set error
    //break apic assembly
    break;
    }
    });
    }
    });

    function isNumeric(str) {
    if (typeof str != "string") return false; // we only process strings!
    return (
    !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
    !isNaN(parseFloat(str))
    ); // ...and ensure strings of whitespace fail
    }

    function isInteger(str) {
    var n = Math.floor(Number(str));
    return n !== Infinity && String(n) === str && n >= 0;
    }

    function isBoolean (str){
    return str === "true"
    }


    ------------------------------
    Tom van Oppens
    ------------------------------