• Stars
    star
    82
  • Rank 382,843 (Top 8 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A lightweight Go library for writing responses and errors to HTTP

herodot

Join the chat at https://slack.ory.sh/ Build Status Coverage Status


Herodot is a lightweight SDK for writing RESTful responses. It is comparable to render but provides easier error handling. The error model implements the well established Google API Design Guide. Herodot currently supports only JSON responses but can be extended easily.

Herodot is used by ORY Hydra and serves millions of requests already.

Installation

Herodot is versioned using go modules and works best with pkg/errors. To install it, run

go get -u github.com/ory/herodot

Upgrading

Tips on upgrading can be found in UPGRADE.md

Usage

Using Herodot is straightforward. The examples below will help you get started.

JSON

Herodot supplies an interface, allowing to return errors in many data formats like XML and others. Currently, it supports only JSON.

Write responses

var hd = herodot.NewJSONWriter(nil)

func GetHandler(rw http.ResponseWriter, r *http.Request) {
	// run your business logic here
	hd.Write(rw, r, map[string]interface{}{
	    "key": "value"
	})
}

type MyStruct struct {
	Key string `json:"key"`
}

func GetHandlerWithStruct(rw http.ResponseWriter, r *http.Request) {
	// business logic
	hd.Write(rw, r, &MyStruct{Key: "value"})
}

func PostHandlerWithStruct(rw http.ResponseWriter, r *http.Request) {
	// business logic
	hd.WriteCreated(rw, r, "/path/to/the/resource/that/was/created", &MyStruct{Key: "value"})
}

func SomeHandlerWithArbitraryStatusCode(rw http.ResponseWriter, r *http.Request) {
	// business logic
	hd.WriteCode(rw, r, http.StatusAccepted, &MyStruct{Key: "value"})
}

func SomeHandlerWithArbitraryStatusCode(rw http.ResponseWriter, r *http.Request) {
	// business logic
	hd.WriteCode(rw, r, http.StatusAccepted, &MyStruct{Key: "value"})
}

Dealing with errors

var writer = herodot.NewJSONWriter(nil)

func GetHandlerWithError(rw http.ResponseWriter, r *http.Request) {
    if err := someFunctionThatReturnsAnError(); err != nil {
        hd.WriteError(w, r, err)
        return
    }

    // ...
}

func GetHandlerWithErrorCode(rw http.ResponseWriter, r *http.Request) {
    if err := someFunctionThatReturnsAnError(); err != nil {
        hd.WriteErrorCode(w, r, http.StatusBadRequest, err)
        return
    }

    // ...
}

Errors

Herodot implements the error model of the well established Google API Design Guide. Additionally, it makes the fields request and reason available. A complete Herodot error response looks like this:

{
  "error": {
    "code": 404,
    "status": "some-status",
    "request": "foo",
    "reason": "some-reason",
    "details": [{ "foo": "bar" }],
    "message": "foo"
  }
}

To add context to your errors, implement herodot.ErrorContextCarrier. If you only want to set the status code of errors implement herodot.StatusCodeCarrier.

More Repositories

1

hydra

OpenID Certifiedβ„’ OpenID Connect and OAuth Provider written in Go - cloud native, security-first, open source API security for your infrastructure. SDKs for any language. Works with Hardware Security Modules. Compatible with MITREid.
Go
14,588
star
2

kratos

Next-gen identity server (think Auth0, Okta, Firebase) with Ory-hardened authentication, MFA, FIDO2, TOTP, WebAuthn, profile management, identity schemas, social sign in, registration, account recovery, passwordless. Golang, headless, API-only - without templating or theming headaches. Available as a cloud service.
Go
8,361
star
3

keto

Open Source (Go) implementation of "Zanzibar: Google's Consistent, Global Authorization System". Ships gRPC, REST APIs, newSQL, and an easy and granular permission language. Supports ACL, RBAC, and other access models.
Go
4,528
star
4

dockertest

Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work.
Go
3,676
star
5

oathkeeper

A cloud native Identity & Access Proxy / API (IAP) and Access Control Decision API that authenticates, authorizes, and mutates incoming HTTP(s) requests. Inspired by the BeyondCorp / Zero Trust white paper. Written in Go.
Go
3,140
star
6

ladon

A SDK for access control policies: authorization for the microservice and IoT age. Inspired by AWS IAM policies. Written for Go.
Go
2,280
star
7

fosite

Extensible security first OAuth 2.0 and OpenID Connect SDK for Go.
Go
2,218
star
8

k8s

Kubernetes Helm Charts for the ORY ecosystem.
Mustache
322
star
9

kratos-selfservice-ui-node

TypeScript
278
star
10

hydra-login-consent-node

This is an ExpressJS reference implementation for the ORY Hydra User Login and Consent interface written in TypeScript and ExpressJS.
TypeScript
266
star
11

go-acc

Accurate Code Coverage reporting for Golang (Go)
Go
208
star
12

examples-archive

THIS REPOSITORY IS NOT UP TO DATE. Different docker-based examples for ORY's services (Hydra, Keto, Oathkeeper).
Shell
129
star
13

docs

The Ory documentation
TypeScript
125
star
14

graceful

A best practice http server set up that supports graceful shutdown
Go
123
star
15

sdk

The place where ORY's SDKs are being auto-generated
C#
109
star
16

examples

A curated collection of examples and solutions created and maintained by the Ory Community.
JavaScript
103
star
17

kratos-selfservice-ui-react-nextjs

A full reference implementation for designing your own login, registration, recovery, verification, ... pages using Ory Kratos' APIs.
TypeScript
81
star
18

elements

Ory Elements is a component library that makes building login, registration and account pages for Ory a breeze. Check out the components library on Chromatic https://www.chromatic.com/library?appId=63b58e306cfd32348fa48d50
TypeScript
77
star
19

network

Ory runs a global end-to-end security infrastructure for humans, robots, and servers. We build and use open source software.
77
star
20

x

Libraries used in the Ory ecosystem
Go
77
star
21

kratos-selfservice-ui-react-native

A reference implementation of an app using ORY Kratos for auth (login), sign up (registration), profile settings (update password), MFA/2FA, account recovery (password reset), and more for React Native. This repository is available as an expo template!
TypeScript
68
star
22

fosite-example

Go
66
star
23

kratos-client-go

Shell
55
star
24

hydra-consent-app-go

A simple consent app for Hydra written in Go - for Hydra =< 1.0.0
Go
41
star
25

cli

The Ory CLI.
Go
38
star
26

jobs

Want to build the next generation identity stack? You've come to the right place!
37
star
27

hydra-consent-app-express

A simple nodejs consent app based on express - for Hydra =< 1.0.0
JavaScript
37
star
28

hydra-client-go

Shell
34
star
29

osin-storage

PostgreSQL storage backend for RangelReale osin OAuth2
Go
33
star
30

oathkeeper-maester

Kuberenetes CRD Controller for Ory Oathkeeper. ⚠️ Maintained by the community, not an official Ory project!
Go
32
star
31

hydra-maester

Kuberenetes CRD Controller for Ory Hydra. ⚠️ Maintained by the community, not an official Ory project!
Go
29
star
32

web

www.ory.sh
TypeScript
25
star
33

hydra-client-java

Java
25
star
34

kratos-nextjs-react-example

Add login, registration, account recovery (password reset), account verification (email verification), social sign in, multi-factor authentication to your Next.js / React App using Ory!
TypeScript
25
star
35

status

DEPRECATED
Markdown
21
star
36

closed-reference-notifier

A GitHub action to open an issue when GitHub references in your code are closed.
TypeScript
20
star
37

hydra-js

DOES NOT WORK WITH VERSIONS > 0.10.0 - A simple library to help you build node-based identity providers that work with Hydra.
JavaScript
18
star
38

go-convenience

Well-tested helpers for dealing with daily problems in Go.
Go
18
star
39

defcon-30-ctf

Go
17
star
40

redux-saga-fetch

A simple wrapper that reduces boilerplate code when using redux-saga in combination with async backend calls.
TypeScript
16
star
41

hydra-client-php

PHP
15
star
42

meta

A place where we plan and schedule our open source activities and track cross-project and ory-wide issues
Shell
15
star
43

integrations

TypeScript
14
star
44

kratos-client-php

PHP
14
star
45

keto-client-go

Shell
14
star
46

build-buf-action

A GitHub action to build and lint protobuf using buildbuf
Shell
13
star
47

encrypt-dir

A very simple cli helper that encrypts files in directories using AES-GCM (128bit)
Go
13
star
48

summit

This repository holds all material related to the Ory Summit, specifically the presentations.
11
star
49

common

Ory's cross-project go libraries, intended for internal use.
Go
11
star
50

client-go

Shell
11
star
51

docusaurus-template

DEPRECATED
JavaScript
10
star
52

works

This repository shows examples of practical solutions using Ory projects and other OSS
Go
10
star
53

oathkeeper-client-go

Shell
10
star
54

jsonschema

JSONSchema (draft04, draft06, draft07) Validation using Go
Go
9
star
55

ladon-community

Go
9
star
56

ci

Automation and robots for Ory's CI and CD pipelines
Shell
7
star
57

kratos-client-js

Autogenerated kratos SDK.
7
star
58

keto-client-java

Java
7
star
59

kratos-client-rust

Autogenerated kratos SDK.
Rust
7
star
60

kratos-client-java

Java
6
star
61

oathkeeper-client-php

PHP
6
star
62

keto-client-php

PHP
6
star
63

hydra-auth0-consent-sdk

A NodeJS library for working with Auth0 as an Identity Provider
JavaScript
6
star
64

client-dotnet

Autogenerated client SDK.
C#
6
star
65

kratos-client-ruby

Autogenerated kratos SDK.
Ruby
6
star
66

ory-config

A small Web App for configuring Ory systems built in VueJs 2.x
Vue
6
star
67

ory-sdk-go

Go
6
star
68

pagination

Go
5
star
69

kratos-client-dart

Autogenerated kratos SDK.
Dart
5
star
70

ory-sdk-archive

Shell
5
star
71

client-php

PHP
5
star
72

open-source-support

Are you looking for help above and beyond our community self service support?
5
star
73

milestone-action

JavaScript
5
star
74

eslint-config-ory-am-react

The ESLint configuration used by Ory (React specific)
JavaScript
5
star
75

themes

TypeScript
5
star
76

kratos-maester

5
star
77

hydra-client-js

Autogenerated hydra SDK.
4
star
78

label-sync-action

JavaScript
4
star
79

summit-platform

TypeScript
4
star
80

kratos-client-python

Autogenerated kratos SDK.
Python
4
star
81

keto-maester

4
star
82

metrics-middleware

A simple metrics middleware for segment.io
Go
4
star
83

sdk-js

JavaScript
4
star
84

hydra-client-dart

Autogenerated hydra SDK.
Dart
4
star
85

client-java

Java
4
star
86

homebrew-tap

Location for all of Ory's homebrew packages
Ruby
4
star
87

client-js

Autogenerated client SDK.
4
star
88

eslint-config-ory-am

The ESLint configuration used by Ory
JavaScript
3
star
89

changelog

Ory Changelog Generator
JavaScript
3
star
90

ory-client-go

3
star
91

scoop

3
star
92

slack-invite

3
star
93

oathkeeper-client-dotnet

Autogenerated oathkeeper SDK.
C#
3
star
94

oathkeeper-client-js

Autogenerated oathkeeper SDK.
3
star
95

hydra-oracle-plugin

Go
3
star
96

hydra-client-ruby

Autogenerated hydra SDK.
Ruby
3
star
97

hydra-client-rust

Autogenerated hydra SDK.
Rust
3
star
98

release

Release infrastructure for ORY and related components
HTML
3
star
99

client-python

Autogenerated client SDK.
Python
3
star
100

hydra-client-dotnet

Autogenerated hydra SDK.
C#
3
star