# somata

> Microservices framework for Node.js

Latest version **0.4.0-alpha.4.4** (published 2019-08-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install somata
pnpm add somata
yarn add somata
bun add somata
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.0-alpha.4.4 |
| Published | 2019-08-16 |
| First published | 2014-07-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 20.9 KB |
| Known vulnerabilities | 0 (+25 in 2 direct dependencies) |
| Install scripts | no |
| Author | Sean Robertson |
| Maintainers | spro |
| Keywords | somata, microservice, distributed |

## Links

- npm: https://www.npmjs.com/package/somata
- Homepage: http://github.com/somata/somata-node
- npm.io page: https://npm.io/package/somata

## Dependencies (6)

- [ws](https://npm.io/package/ws.md) ^7.0.0
- [uuid](https://npm.io/package/uuid.md) ^3.3.2
- [axios](https://npm.io/package/axios.md) ^0.18.0
- [debug](https://npm.io/package/debug.md) ^4.1.1
- [express](https://npm.io/package/express.md) ^4.17.1
- [express-ws](https://npm.io/package/express-ws.md) ^4.0.0

## Recent versions

- 0.4.0-alpha.4.4 (latest) — 2019-08-16
- 0.4.0-alpha.2 (alpha) — 2019-07-12
- 0.4.0-alpha.4.3 — 2019-08-13
- 0.4.0-alpha.4.2 — 2019-08-13
- 0.4.0-alpha.4.1 — 2019-08-11
- 0.4.0-alpha.4 — 2019-08-10
- 0.4.0-alpha.3 — 2019-08-06
- 0.4.0-alpha.1 — 2019-07-10
- 0.4.0-alpha.0 — 2019-07-10
- 0.3.1 — 2017-09-27
- 0.3.0 — 2017-08-22
- 0.2.9 — 2017-04-06
- 0.2.8 — 2017-03-22
- 0.2.7 — 2017-03-01
- 0.2.6 — 2017-02-09
- … 30 more at https://npm.io/package/somata/versions

## README

# Somata (the HTTP- & WebSocket-based rewrite)

## Quickstart

### Install

Clone this branch and install dependencies:

```sh
> git clone --single-branch --branch somata-http git://github.com/somata/somata-node somata-http
> cd somata-http
> npm install
```

### Set up DNS to resolve services

Instead of using a registry to locate services, clients now find services with DNS - a service that would have been called `examples:hello` will now be located at `http://hello.examples/`. In order to resolve services on a local machine (instead of e.g. Kubernetes which will automatically configure DNS based on the Kubernetes Service name) you will have to manually define the location of each service.

With nginx + simon this is easy enough. Assuming a service located at port :8000 (the default) and a DNS suffix of ".pronto" (as set up with dnsmasq), add a record for the example hello service with `simon-says`:

```sh
> simon-says hello.examples.pronto :8000
Pointing hello.examples.pronto to 127.0.0.1:8000
1) "127.0.0.1:8000"
```

### Run the examples

Run the example hello service:

```sh
> DEBUG=somata.* coffee examples/service.coffee
  somata.service Warning: Deprecated service identifier: 'examples:hello' +0ms
  somata.service Service identifier updated to 'hello.examples' +2ms
  somata.service Listening on :8000 +7ms
```

Run the example hello client using HTTP POST requests:

```sh
> SOMATA_REQUEST=post SOMATA_DNS_SUFFIX=pronto coffee examples/client.coffee
[hello_jones] Hello jones
[hello_sam] Hello sam
```

## Options

Change the port a service is bound to with `SOMATA_PORT`. The default is 8000.

Change the default request method with `SOMATA_REQUEST`. Options are "post" and "ws" (for WebSockets - experimental).

Change the DNS suffix with `SOMATA_DNS_SUFFIX`. The default is no suffix – the `hello.examples` service will be available at `http://hello.examples/`.


## Testing services with Curl

Call a service method by POSTing an object `{args: [...]}` to `http://service_name.suffix/method_name.json`. The response will be an object `{type: "response", data: ...}`:

```sh
> curl -X POST -d '{"args": ["Jones"]}' -H 'Content-type: application/json' hello.examples.pronto/sayHello.json
{"type":"response","data":"Hello Jones"}
```

---
_Source: https://npm.io/package/somata · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
