• Stars
    star
    9
  • Rank 1,880,042 (Top 39 %)
  • Language
    Crystal
  • License
    MIT License
  • Created about 7 years ago
  • Updated about 6 years ago

Reviews

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

Repository Details

Middleware for generates / pick up a unique request ID for Crystal servers.

request_id

Linux Build Shards version

Middleware for generates / pick up a unique request ID for Crystal servers.

This module set response HTTP Header like this:

X-Request-ID: 753a468b-4179-40c4-bb58-ff508cb39d67

Installation

Add this to your application's shard.yml:

dependencies:
  request_id:
    github: SuperPaintman/request-id

Usage

With pure Crystal server

require "request_id"
require "http/server"

server = HTTP::Server.new("0.0.0.0", 8080,
  [
    RequestID::Handler.new
  ]) do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello request id!"
end

server.listen

With Kemal

require "request_id"
require "kemal"

add_handler RequestID::Handler.new

get "/" do |env|
  "Hello request id!"
end

Kemal.run

Custom Generator

By default: uuid

require "request_id"
require "http/server"

class CustomRequestIDHandler < RequestID::Handler
  def generator
    "custom_request_id_generator"
  end
end

server = HTTP::Server.new("0.0.0.0", 8080,
  [
    CustomRequestIDHandler.new
  ]) do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello request id!"
end

server.listen

Examples

Random ID

curl -I localhost:8080
# HTTP/1.1 200 OK
# X-Request-ID: 5e3df631-85e6-4eaf-bb1c-68375291332e

Set ID via Header

curl -I -H 'X-Request-ID:4ce4089d-e01e-4c7f-b35c-2ca383c7abf5' localhost:8080
# HTTP/1.1 200 OK
# X-Request-ID: 4ce4089d-e01e-4c7f-b35c-2ca383c7abf5

Test

crystal spec

Contributing

  1. Fork it (https://github.com/SuperPaintman/request-id/fork)
  2. Create your feature branch (git checkout -b feature/<feature_name>)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin feature/<feature_name>)
  5. Create a new Pull Request

Contributors


API

Docs


Changelog

Changelog


License

MIT

More Repositories

1

the-evolution-of-a-go-programmer

The Evolution of a Go Programmer
Go
1,270
star
2

nice

Highly customizable and idiomatic Go CLI app framework 👌
Go
208
star
3

babel-plugin-transform-pipeline

Compile pipeline operator to ES5
JavaScript
59
star
4

ulid

Universally Unique Lexicographically Sortable Identifier (ULID) in Crystal
Crystal
27
star
5

serve

Command line static HTTP server
Crystal
23
star
6

babel-plugin-syntax-pipeline

Allow parsing of pipeline operator |>
JavaScript
23
star
7

habrlang

Step by Step guide how to make your own programming language
JavaScript
20
star
8

Tomorrow-Night-Telegram-Theme

A Tomorrow Night Telegram theme
Shell
17
star
9

phaser-typescript-tutorial

A tutorial on making a game with Phaser + TypeScript + Webpack
JavaScript
16
star
10

design-for-failure

Repository for the book "Design for Failure" 📈
14
star
11

ms

Library to easily convert various time formats to milliseconds and milliseconds to human readable format.
Crystal
14
star
12

crystal-ctags

Tool for generation ctags for Crystal
Crystal
13
star
13

blog

SuperPaintman's personal blog
10
star
14

response-time

Response time for Crystal servers.
Crystal
8
star
15

dotfiles

~/.*
Shell
7
star
16

winston-seq

A Seq transport for Winston
TypeScript
7
star
17

phaser-typescript-boilerplate

Template for Phaser project (TypeScript + Webpack)
JavaScript
3
star
18

vscode-monokai-extended

Extends Monokai Theme (port of the Monokai TextMate Theme)
JavaScript
3
star
19

etag

Library to generate HTTP ETags
Crystal
3
star
20

superpaintman.com

SuperPaintman's jumppad
Svelte
1
star
21

express-lazy-middleware

Express lazy middleware initialize
TypeScript
1
star