SuiteScript Design – Generating RESTful URLs

On to this week’s design pattern. It’s technically a single utility function, but it plays a major role in my integration design pattern, which we’ll continue exploring over the next few weeks.

Most modern systems that expose an HTTP API employ a RESTful interface, and their API URLs follow a reasonably consistent naming pattern.

Consistent patterns are my favorite thing! Because they allow us to write code that takes advantage of that consistency.

Here you can find the function I use in my integration systems that generates a typical URL path for any resource or child resource in a RESTful API.

It’s written in 2.1 and takes advantage of modern syntax like destructuring and default parameters. All of that could quickly be adapted to a 2.0 environment, though.

I see a lot of people struggle with or write “clever” (obscure) code for URL generation, but URLs – especially those for a RESTful service – follow very simple patterns. The hardest part is usually generating the query string, and N/url.format() does that for us with its params argument.

All we need to do – and so all this function really does – is create an Array of all the possible path values we might have, filter out any empty values, then join the rest with a /.

You can see the details and example usage and output in the JSDoc header for the function.



{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Related posts

January 7, 2021

Anything I wrote today about business would both feel and be inadequate. I simply can’t arrive at the words to express how I feel in this moment. So instead, here are a few helpful ...

Read More

December 20, 2020

2020 was a hundred swift kicks to the shorts and one giant kick in the ass. If you’ve lost people you love, if you’ve gotten sick or hurt, if you’ve lost your job, if ...

Read More

December 16, 2020

“I’ve been meaning to learn SuiteScript, but it’s hard to find the time …”“We’re slammed, and I just don’t have the time …”“I haven’t made the time …” All are variations of a theme ...

Read More

December 14, 2020

Last week we looked at mimicking the functionality of a REST endpoint with its own module (e.g. retrieving a User, or a list of Users, refreshing a token, etc). For complex integrations that rely on a large ...

Read More