Skip to content

Latest commit

 

History

History
35 lines (27 loc) · 2.96 KB

MANIFESTO.md

File metadata and controls

35 lines (27 loc) · 2.96 KB

Manifesto

It's 2017. APIs are a relatively well-understood concept. But why does it seem so hard to get started building a well-designed, fully-featured API in Node today? Perhaps it's the JavaScript mindset of making everything a package which shouldn't take on too many roles. Perhaps people have had bad experiences with omakase software and have completely dismissed them. Or maybe there just hasn't been a large need for Node APIs yet due to existing infrastructure (dare I say 'legacy'). Regardless, the Node landscape right now feels like the Wild West, which is both exhilarating and terrifying. There's still a world of opportunity but at the same time it feels like anything goes.

I think we can establish that well-designed APIs allow for the following:

  • RESTful in Nature and Support GraphQL
  • Schema-based Data Modeling Layer with an Object-Relational Mapper (ORM)
  • Have Tools and Suggestions for Data Migration
  • Authentication of Users or API Consumers
  • Authorization of Certain Actions or Routes
  • Have Secure Defaults and Serve Only Over HTTPS in Production
  • Have Auto-generated, Interactive Documentation of Resources and Routes
  • Provide Utilities for Encryption and Hashing
  • Log Requests Without Impacting Performance
  • Have Sane Error Messages Which Translate to As Many Languages Necessary
  • Can Send Transactional Email
  • Have Console Commands for Common Tasks
  • Support Interaction with the Filesystem
  • Perform Periodic Tasks Automatically
  • Manage Configuration and Credentials
  • Fetch Data from and Interact with Other APIs
  • Use Modern Language Features and Syntax
  • Easily Deployable
    ...and more...

I want to help you build great APIs regardless of their size or complexity. I want Rubio to be a great tool for building both a microservice and an entire monolith that powers your frontend. I want to provide sane defaults and some convention without completely sacrificing configuration. Hopefully, Rubio can establish some boundaries without becoming too much of a standard.

Rubio is not a new concept and stands on the shoulders of many giants. I'd like to acknowledge Laravel, Lumen, Rails, Feathers, Lux, and Create React App which inspired or influenced Rubio in some way.

If you'll trust me, I think we as a community can build something great. Instead of dividing our efforts across hundreds of disparate packages, let's pool our efforts to build something far greater than the sum of our individual parts.

Did I forget something? Do you already have a favorite tool you want in Rubio? Speak up! We'll have to work together if we want to achieve great things.

-- Bill Dybas