Skip to content
/ typhon Public

A wrapper around Go's net/http to provide safety and convenience. At Monzo, Typhon forms the basis of most clients and servers in our microservices platform.

License

Notifications You must be signed in to change notification settings

monzo/typhon

Folders and files

NameName
Last commit message
Last commit date
Jan 31, 2025
May 12, 2022
Feb 23, 2023
Jan 18, 2022
Feb 23, 2023
Mar 7, 2018
Jan 26, 2022
Jan 18, 2022
Jan 18, 2022
Dec 3, 2018
Apr 20, 2021
Nov 16, 2018
Feb 23, 2023
Dec 20, 2018
Nov 16, 2018
May 13, 2022
May 13, 2022
May 5, 2023
Nov 7, 2022
Apr 22, 2017
Sep 13, 2018
Dec 20, 2018
Feb 23, 2023
Feb 23, 2023
May 13, 2022
Jun 6, 2022
Oct 25, 2018
Oct 25, 2018
Oct 25, 2018
Feb 11, 2021
Feb 11, 2021
Jan 31, 2025
Jan 31, 2025
Jan 19, 2023
Jan 18, 2022
May 13, 2022
Nov 15, 2018
Sep 23, 2024
Nov 16, 2018
Sep 23, 2024
May 5, 2023
Aug 6, 2018
Nov 16, 2018

Repository files navigation

Typhon 🐲

Build Status GoDoc

Typhon is a wrapper around Go's net/http library that we use at Monzo to build RPC servers and clients in our microservices platform.

It provides a number of conveniences and tries to promote safety wherever possible. Here's a short list of interesting features in Typhon:

  • No need to close body.Close() in clients
    Forgetting to body.Close() in a client when the body has been dealt with is a common source of resource leaks in Go programs in our experience. Typhon ensures that – unless you're doing something really weird with the body – it will be closed automatically.

  • Middleware "filters"
    Filters are decorators around Services; in Typhon servers and clients share common functionality by composing it functionally.

  • Body encoding and decoding
    Marshalling and unmarshalling request bodies to structs is such a common operation that our Request and Response objects support them directly. If the operations fail, the errors are propagated automatically since that's nearly always what a server will want.

  • Propagation of cancellation
    When a server has done handling a request, the request's context is automatically cancelled, and these cancellations are propagated through the distributed call stack. This lets downstream servers conserve work producing responses that are no longer needed.

  • Error propagation
    Responses have an inbuilt Error attribute, and serialisation/deserialisation of these errors into HTTP errors is taken care of automatically. We recommend using this in conjunction with monzo/terrors.

  • Full HTTP/1.1 and HTTP/2.0 support
    Applications implemented using Typhon can communicate over HTTP/1.1 or HTTP/2.0. Typhon has support for full duplex communication under HTTP/2.0, and h2c (HTTP/2.0 over TCP, ie. without TLS) is also supported if required.

About

A wrapper around Go's net/http to provide safety and convenience. At Monzo, Typhon forms the basis of most clients and servers in our microservices platform.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages