This marks the preliminary phase of a sequence of posts the place I intend to debate overarching concepts associated to Simba.js. These embody its utilization situations, potential functions, related issues, suggestions, and extra.
One other JS library/framework?
Quick reply, sure. Lengthy reply, effectively…
If you’re one thing like me, you could be actually aggravated everytime you need to begin a brand new JS/TS API. More often than not, you must configure the identical stuff again and again, making a tsconfig.json, .eslintrc, LICENSE, jest.config.js/ts, Dockerfile, and so many extra relying on how complicated your challenge is.
Again in 2021, once I had simply began programming (I had one yr of expertise or so), I made a decision I didn’t need to do this once more, so I created a CLI device to assist me make all of the configs recordsdata and keep away from the stress of making them manually again and again. That device was very helpful on the times I didn’t need to create something manually, nevertheless it was not sufficient for me. Why? As a result of once you create an API (not less than a RESTFul API) a lot of the belongings you do are normally the identical.
It’s important to config your server, then your database, then add some issues within the center to deal with what you are promoting logic — let’s name it “companies” — and at last add some routes — “controllers” — to reveal what you are promoting logic via some endpoints. When you get to that time, you in all probability want so as to add some sort of validation between the request you obtain and the logic you’ve gotten in your controllers, so you might find yourself including some schemas to validate if the request a consumer despatched was right, and so forth.
As you may see, making a JS/TS RESTFul API is normally a really repetitive course of. So I began engaged on creating one thing to keep away from this course of.
I bought inspiration from many locations. Throughout that point, we used to construct SPAs with CRA, and it was enjoyable. CRA gave you a lot of the instruments you wanted to begin constructing your individual app, however that was for the frontend. What in regards to the backend? I bear in mind we didn’t have one thing like CRA, however we had in style full frameworks reminiscent of NestJS or SailsJS, in addition to very opinionated (or not) in style frameworks reminiscent of Express, koa or Fastify that didn’t present you not less than a skeleton or fundamental config to start with like CRA used to offer. In accordance with what I bear in mind, there was no center level. You needed to go solely with Nest or go by yourself with plain Categorical or Fastify.
That’s how the thought of Simba.js (I didn’t have the identify but) got here to my thoughts. I needed a device that gave me a place to begin, so I needed to write queries, controllers, or companies by hand, however I simply needed to observe the skeleton to make it work. I wanted one thing that didn’t really feel like magic (sorry, Nest) the place you simply need to import one thing, and that was it, but in addition, I didn’t need to reinvent the wheel.
I used to be prepared, I constructed a CLI device that allowed me, with a number of keystrokes, to create somewhat boilerplate with all of the configuration executed and a completely working RESTFul API, however the identify was lacking, after which the thought got here to my thoughts. I named my framework/library after my cat, Simba, the laziest creature I’ve ever met. However so I’m. Why? As a result of I don’t need to create a RESTFul API from scratch once more.
The aim of Simba.js is to standardize the way in which we create RESTFul APIs. Properly, in truth, that was the aim. These days, I additionally need to standardize the way in which we construct GraphQL APIs too. So let’s say that Simba.js goals to turn out to be the usual technique to construct TS APIs.
After all, Simba.js is closely opinionated. I selected the backend frameworks I appreciated (and likewise very fashionable ones): Categorical and Fastify, and likewise the instruments I appreciated on the time, which have been Joi and Mongoose (at present not supported) and a few others. I additionally selected the eslint and prettier config I appreciated, the check framework, and so forth.
I selected these instruments primarily based by myself expertise as a result of they work very effectively collectively, and it was simple to mix them in a reusable approach. I additionally suppose this is a wonderful level to begin. As soon as Simba.js gives you with the boilerplate, it’s fairly simple to control it and escalate the applying primarily based in your wants. Apart from, Simba.js provides you a lot instruments to assist you to construct your individual API. You may select:
- Between Categorical and Fastify,
- A MongoDB or a traditional Relational DB
- A REST API or a GraphQL one
- To have a GitHub Motion of linting and testing
- Which license you need to use, and so on.
And don’t forget you’ll now not have to fret about these annoying configuration recordsdata everybody hates.
That’s it for now.