Concepts overview
Codehooks.io simplifies and speed up API and microservice development by combining serverless JavaScript functions and fast Database persistence with a coherent and well documented API. Your application package is deployed to the secure Codehook serverless cloud.
Forget about servers, databases, infrastrucure and protocols - just focus on what matters.
Codehooks includes these main features:
- Node.js and JavaScript - Same language for frontend and backend development (ES6 and Typescript)
- NPM - Node.js package manager (npm) integration
- Node.js Express - API development with Express-like API
- NoSQL - Document database with Mongodb-like API
- Key-Value - Key-Value database with a Redis-like API (subset)
- Worker Queues - Persistent queues with worker functions
- Background jobs - Cron jobs with scheduled worker functions
- CLI - Powerful Command Line Interface (CLI) for productivity and DevOps/CI support
Read on to learn more about how development with Codehooks.io can simplify and add value to your project and team.
Unless you've already have, please read the quick start first to learn how to install the CLI, and how to sign up/login to create your first Codehooks project.
Codehooks main concepts
Project
A project is the top level concept in Codehooks. A project is owned by an account (private or company) and contains one or multiple "spaces" with your deployed code, data and access credentials in an isolated and secure unit. You can create multiple projects within your account and you can join/invite others to a project.
Projects are created with the CLI command coho create
(CLI docs here)
You can also manage your projects and spaces using the account user interface at https://account.codehooks.io.
The project application source code
A Codehooks application follows the familiar principles and best practices of modern JavaScript development. A project directory typically contains:
- An
index.js
file for the application main entry code - A
package.json
file with library dependencies - A
config.json
file with project information
We also recommend that you add source control (GIT) to manage your versions and branches. Typically this will be a git repo with branches that are deployed to various spaces.
A minimal example
The following example shows a complete process for creating a new project with an application that is deployed to the Codehooks serverless cloud.
First, create and setup a new project application:
coho create example
cd example
npm init --yes
npm install codehooks-js --save
After running the commands your project directory contains these files:
.
├── config.json
├── index.js
├── node_modules
├── package-lock.json
└── package.json
If you inspect the source file index.js you'll see the default generated application code:
/*
* Auto generated Codehooks (c) example.
*/
import app from 'codehooks-js'
// routehook function
function helloFunc(req, res) {
console.log("Hello world!", req);
res.json({"message": "Hello world!"});
}
// REST hook
app.get('/hello', helloFunc);
// bind to serverless runtime
export default app.init();
We can now deploy our application with the CLI command coho deploy
(CLI docs here).
After deployment we can inspect the application details with the coho info
command, in this example showing our default space dev
with its base endpoint URL and access token(s):
coho info
Project name: example-4g9p
Team: YOUR-NAME (personal account)
API endpoint: https://example-4g9p.api.codehooks.io/dev/*
Spaces:
┌──────────────┬────────────────────────────────────────────┬──────┬──────┐
│ Name │ Tokens │ Jwks │ Env │
├──────────────┼────────────────────────────────────────────┼──────┼──────┤
│ dev (active) │ a77926ca-xxx-yyyy-zzzzz-14eee564f8d5 (RW) │ │ │
└──────────────┴────────────────────────────────────────────┴──────┴──────┘
After successful deployment we can test our application endpoint with curl. This minimal example and test shows that our application is deployed to a secure endpoint and returns the expected result:
curl -X GET 'https://example-4g9p.api.codehooks.io/dev/hello' \
-H 'x-apikey: a77926ca-xxx-yyyy-zzzzz-14eee564f8d5'
{"message":"Hello world!"}
Project spaces
A project space is a self-contained and isolated bundle of code, datastores and security settings within a specific project. All projects have a default space called dev
which is created automatically when you add a project. You create new spaces with the coho add
command (CLI docs here). You can easily switch between different project spaces with the coho use
command (CLI docs here). Spaces can also have restricted access (team ADMINs only), which is convenient for production deployments.
For example, in your project you want to have isolated development, testing and production spaces.
Project-X
└── dev
├── source code (git branch dev)
├── security settings & env variables
└── data stores
└── test
├── source code (git branch test)
├── security settings & env variables
└── data stores
└── prod (restricted)
├── source code (git branch prod)
├── security settings & env variables
└── data stores
Deploy your application to the Codehooks serverless cloud
Each project space is created as an isolated resource group in the Codehooks cloud.
For example, the coho add prod
command creates a project space called prod
. By switching to the space with the coho use prod
command, this space is now the active (changed in the config.json project file).
On deployment with the coho deploy
command, the current version of your application source code is packed and distributed as a serverless runtime to the prod space in the Codehook cloud.
Similarily, switching to another space, e.g. by using the coho use dev
, sets the dev space as the active, and coho deploy
will deploy the application to the active dev space.
This is a powerful feature, which effectively enables you to run multiple versions of your application with separate settings, environments and data stores.
Built in Datastores
Persisting, querying and manipulating data is essential in any application. Codehooks comes with a built in datastore that supports streaming NoSQL and Key-Value operations. No need to think about drivers and protocols, it's built directly into the Codehooks APIs.
- NoSQL object data are accessed with the standard Database API.
- Key-Value data are accessed with the standard Key-Value API
Data wrangling
Using the CLI command coho import
, you can easily import any CSV or JSON file into a datastore.
Furthermore, the coho query
command lets you query and transform data in advanced ways.
coho import -c stocks -f ~/Downloads/all_stocks_5yr.csv
coho query stocks --query 'Name=GOOG&open>10' --limit 2 --table
┌───────────┬───────────┬───────────┬───────────┬───────────┬───────────┬───────────┬───────────┐
│ date │ open │ high │ low │ close │ volume │ Name │ _id │
├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
│ 2013-03-… │ 15.98 │ 16.36 │ 15.93 │ 16.25 │ 8383300 │ GOOG │ 18007b5f… │
├───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┼───────────┤
│ 2013-03-… │ 14.7 │ 14.93 │ 14.5 │ 14.82 │ 9125300 │ GOOG │ 18007b5f… │
└───────────┴───────────┴───────────┴───────────┴───────────┴───────────┴───────────┴───────────┘
Fast development flow
The development process with Codehooks is fast. You use your favorite tools (e.g. VS Code) combined with the CLI.
For example, after creating a new project and a project space, you write some code that you need to verify, test, debug and deploy. The following steps shows a typical development flow.
- Open the index.js and other source files in your favorite code editor
- Set the active space to deploy your application, e.g.
coho use dev
- Deploy the application with
coho deploy
- Check logs to see what's going on in your deployed application,
coho log --follow
- Find and fix bugs in your code, and redeploy with
coho deploy
Command Line Interface (CLI)
The Codehooks CLI is a key tool for managing your account, projects and applications. The CLI has all the commands and functionality you need to manage projects, spaces, security and your serverless JavaScript functions.
Codehooks has a complete set of features for teams to collaborate. The account UI lets you create teams and invite team members.
Read more about the CLI and the full set of commands and features here.
You can also manage your projects and spaces using the account user interface at https://account.codehooks.io.