mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Go Fn Development Kit (FDK)
fdk-go provides convenience functions for writing Go fn code
For getting started with fn, please refer to https://github.com/fnproject/fn/blob/master/README.md
Installing fdk-go
go get github.com/fnproject/fdk-go
or your favorite vendoring solution :)
Examples
For a simple getting started, see the examples and follow
the README. If you already have fn set up it
will take 2 minutes!
Advanced example
TODO going to move to examples too :)
package main
import (
"context"
"fmt"
"io"
"encoding/json"
fdk "github.com/fnproject/fdk-go"
"net/http"
)
func main() {
fdk.Handle(fdk.HandlerFunc(myHandler))
}
func myHandler(ctx context.Context, in io.Reader, out io.Writer) {
fnctx := fdk.Context(ctx)
contentType := fnctx.Header.Get("Content-Type")
if contentType != "application/json" {
fdk.WriteStatus(out, 400)
fdk.SetHeader(out, "Content-Type", "application/json")
io.WriteString(out, `{"error":"invalid content type"}`)
return
}
if fnctx.Config["FN_METHOD"] != "PUT" {
fdk.WriteStatus(out, 404)
fdk.SetHeader(out, "Content-Type", "application/json")
io.WriteString(out, `{"error":"route not found"}`)
return
}
var person struct {
Name string `json:"name"`
}
json.NewDecoder(in).Decode(&person)
// you can write your own headers & status, if you'd like to
fdk.WriteStatus(out, 201)
fdk.SetHeader(out, "Content-Type", "application/json")
all := struct {
Name string `json:"name"`
Header http.Header `json:"header"`
Config map[string]string `json:"config"`
}{
Name: person.Name,
Header: fnctx.Header,
Config: fnctx.Config,
}
json.NewEncoder(out).Encode(&all)
}