Caution
The project is not finished, it is not stable and it is constantly being developed.
webhooks-rs is a project for sending webhooks using the http protocol. The main goals and objectives are to create an application that is high-performing, configurable and scalable.
Note
This project takes part and was created thanks to the 100 Commits challenge and is my first significant project written in Rust.
- Retry policy for failed messages
- Endpoint can be disabled manually
- Circuit breaker
- Persistence
- SDK Beta
- CLI Beta
- Documentation
- Integration tests
- Error handling and validation (as POC)
- Release sdk as crate and bins (with GitHub action)
- Sem ver
- Rate-limit
- Auth
- Signed webhooks - server can verify that message was sent from valid server
- Distributed architecture
- Data retention
- Logging and monitoring
- Dockerized
Application - Is a container that groups endpoints. In a multi-tenant architecture, it can be a separate tenant. Each application can have a separate configuration and secrets (in progress...).
Endpoint - This is the url of the server to which messages are sent. Each endpoint can be deactivated individually - either manually or automatically by the circuit breaker. Endpoint can be only in one application.
Event - This is an event that originated in your system. The event has a topic and a payload. For now, it only supports JSON payload.
Message - In a nutshell, it can be said to be an event for a given endpoint. A given event can be distributed to several endpoints.
Attempt - This is a log of attempts to deliver a particular message. A given message may have multiple delivery attempts (e.g. endpoint is temporarily unavailable and message had to be retried by retry policy).
Before run environment by using just init
. This command run a docker and execute migrations. Server is split into two
parts - server and dispatcher. Run just rs
and just rd
.
Server has rest api interface. Example commands you can find in server/server.http
. Please familiarise oneself
with Domain Explanation
Important
SKD requires running server and dispatcher. See Server section.
You can find an example of the use of the sdk in the examples/src/producer-server.rs
Important
Cli requires running server and dispatcher. See Server section.
To explore all possibilities run cargo run --package=cli
. Cli is divided by resources sections.
$ cargo run --package=cli application create "example application"
App app_2hV5JuBgjMAQlDNNbepHTFnkicy with name 'example application' has been created
To create an endpoint in a recently created application
$ cargo run --package=cli endpoint create app_2hV5JuBgjMAQlDNNbepHTFnkicy http://localhost:8090/ contact.created,contact.updated
Endpoint ep_2hV67JEIXUvFCN4bv43TUXVmX0s has been created
$ cargo run --package=cli event create app_2hV5JuBgjMAQlDNNbepHTFnkicy contact.created '{"foo":"bar"}'
Event evt_2hV6UoIY9p6YnLmiawSvh4nh4Uf has been created
- just - optional, if you want to run raw commands
- docker with docker-compose - optional, if you want to set up the environment on your own
called `Result::unwrap()` on an `Err` value: Os { code: 24, kind: Uncategorized, message: "Too many open files" }
Execute (on linux/mac os) ulimit -n 10000
(default is 1024)
If you want to contribute to the growth of this project, please follow the conventional commits in your pull requests.