mirror of
https://github.com/nikoksr/notify.git
synced 2025-01-22 03:09:35 +02:00
79 lines
2.8 KiB
Markdown
79 lines
2.8 KiB
Markdown
# Generic HTTP service
|
|
|
|
[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/nikoksr/notify/service/http)
|
|
|
|
## Prerequisites
|
|
|
|
Technically, you don't need any prerequisites to use this service. However, you will need an HTTP endpoint to send requests to.
|
|
|
|
See our [Notify Test Server](https://github.com/nikoksr/notify-http-test) for a simple HTTP server that can be used for testing.
|
|
|
|
## Usage
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
stdhttp "net/http"
|
|
|
|
"github.com/nikoksr/notify"
|
|
"github.com/nikoksr/notify/service/http"
|
|
)
|
|
|
|
func main() {
|
|
// Create http service
|
|
httpService := http.New()
|
|
|
|
//
|
|
// In the following example, we will send two requests to the same HTTP endpoint. This is meant to be used with
|
|
// Notify's test http server: https://github.com/nikoksr/notify-http-test. It supports multiple content-types on the
|
|
// same endpoint, to simplify testing. All you have to do is run `go run main.go` in the test server's directory and
|
|
// this example will work.
|
|
// So the following example should send two requests to the same endpoint, one with content-type application/json and
|
|
// one with content-type text/plain. The requests should be logged differently by the test server since we provide
|
|
// a custom payload builder func for the second webhook.
|
|
|
|
// Add a default webhook; this uses application/json as content type and POST as request method.
|
|
httpService.AddReceiversURLs("http://localhost:8080")
|
|
|
|
// Add a custom webhook; the build payload function is used to build the payload that will be sent to the receiver
|
|
// from the given subject and message.
|
|
httpService.AddReceivers(&http.Webhook{
|
|
URL: "http://localhost:8080",
|
|
ContentType: "text/plain",
|
|
Method: stdhttp.MethodPost,
|
|
BuildPayload: func(subject, message string) (payload any) {
|
|
return "[text/plain]: " + subject + " - " + message
|
|
},
|
|
})
|
|
|
|
//
|
|
// NOTE: In case of an unsupported content type, we could provide a custom marshaller here.
|
|
// See http.Service.Serializer and http.defaultMarshaller.Marshal for details.
|
|
//
|
|
|
|
// Add pre-send hook to log the request before it is sent.
|
|
httpService.PreSend(func(ctx context.Context, req *stdhttp.Request) error {
|
|
log.Printf("Sending request to %s", req.URL)
|
|
return nil
|
|
})
|
|
|
|
// Add post-send hook to log the response after it is received.
|
|
httpService.PostSend(func(ctx context.Context, req *stdhttp.Request, resp *stdhttp.Response) error {
|
|
log.Printf("Received response from %s", resp.Request.URL)
|
|
return nil
|
|
})
|
|
|
|
// Create the notifier and use the HTTP service
|
|
n := notify.NewWithServices(httpService)
|
|
|
|
// Send a test message.
|
|
if err := n.Send(context.Background(), "Testing new features", "Notify's HTTP service is here."); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
```
|