Skip to content

Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.

License

Notifications You must be signed in to change notification settings

jexia/semaphore

Repository files navigation

Jexia Semaphore

GoDev Go CI Go report Gitbook Chat on Discord Code test coverage

Semaphore is a feature-rich service orchestrator. Create advanced data flows and expose them through endpoints. Have full control over your exposed endpoints, expose single flows for multiple protocols such as gRPC and GraphQL. Semaphore adapts to your environment. Create custom extensions or use the availability of custom functions and protocol implementations.

asciicast

Adapts to your environment

Semaphore integrates with your existing system(s). Define flows through simple and strict typed definitions. Use your already existing schema definitions such as Protobuffers. Or extend Semaphore with custom modules and proprietary software. Integrate services through flow definitions and create a great experience for your customers and your teams.

Table of contents

  1. Using Semaphore
  2. Getting started
  3. Contributing

Using Semaphore

Semaphore could be used in a wide variety of cases. It could be used to let teams have full control over their exposed endpoints. Create SAGA patterns to automatically rollback requests on failure. Allow users to implement your product with their tools of choice. We are excited to see how you will implement Semaphore in your architecture.

  • Gateway: Semaphore redefines the gateway. Expose a single flow through multiple protocols without changing any of your services.

  • Scalable: You can scale Semaphore up to your needs. All calls within a flow are executed in the most optimal path possible. Branches are created to execute calls concurrently from one another when possible.

  • SAGA patterns: Define rollbacks inside your flows in the case of failure. Rollbacks are automatically executed if a request fails. Rollbacks could reference data received from other services.

  • E2E testing: Expose your internal e2e tests through any protocol. Deploy a Semaphore instance to expose internal endpoints without exposing them to the public.

Getting started

  1. ⚡ CLI
  2. 🚀 Examples
  3. 📚 Documentation

Install

There are variouse install methods available. You could download and install the daemon from source or most commonly used package managers. For more information and install methods please check out the CLI.

$ curl https://raw.githubusercontent.com/jexia/semaphore/master/install.sh | sh

Install Semaphore


Data streams inside Semaphore are defined as flows. A flow could manipulate, deconstruct and forwarded data in between calls and services. Flows are exposed through endpoints. Flows are generic and could handle different protocols and codecs within a single flow. All flows are strictly typed through schema definitions. These schemas define the contracts provided and accepted by services.

endpoint "checkout" "http" {
	method = "POST"
	endpoint = "/checkout"
	codec = "json"
}

endpoint "checkout" "grpc" {
	package = "webshop.cart"
	service = "Payment"
	method = "Checkout"
}

flow "checkout" {
	input "services.Order" {}

	resource "product" {
		request "services.Warehouse" "GetProduct" {
			product = "{{ input:product }}"
		}
	}

	resource "shipping" {
		request "services.Warehouse" "Send" {
			user = "{{ input:user }}"
		}
	}

	output "services.OrderResult" {
		status = "{{ shipping:status }}"

		message "product" {
			id = "{{ product:id }}"
			name = "{{ product:name }}"
			price = "{{ product:price }}"
		}
	}
}

API interaction

Contributing

Thank you for your interest in contributing to Semaphore! ❤ Check out the open projects and/or issues and feel free to join any ongoing discussion.

Everyone is welcome to contribute, whether it's in the form of code, documentation, bug reports, feature requests, or anything else. We encourage you to experiment with the project and make contributions to help evolve it to meet your needs!

See the contributing guide for more details.