Go - NewApi()

Creates a new HTTP API.

import (
  "fmt"

  "github.com/nitrictech/go-sdk/nitric"
)

func main() {
  api, err := nitric.NewApi("public")
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}

Parameters

  • Name
    name
    Required
    Required
    Type
    string
    Description

    The unique name of this API within the app. Subsequent calls to NewApi with the same name will return the same object.

  • Name
    options
    Optional
    Optional
    Type
    ...ApiOption
    Description

    Additional options for the API. See below.

API options

  • Name
    WithPath()
    Optional
    Optional
    Type
    ApiOption
    Description

    Sets a base path for all the routes in the API.

    • Name
      path
      Required
      Required
      Type
      string
      Description

      Base path for all routes in the API.

  • Name
    WithSecurityJwtRules()
    Optional
    Optional
    Type
    ApiOption
    Description

    Sets a security JWT rules on the API.

    • Name
      name
      Required
      Required
      Type
      string
      Description

      The name of the security rule.

    • Name
      rule
      Required
      Required
      Type
      JwtSecurityRule
      Description

      The properties of the JWT security rule.

  • Name
    WithSecurity()
    Optional
    Optional
    Type
    ApiOption
    Description
    • Name
      name
      Required
      Required
      Type
      string
      Description

      The name of the security rule.

    • Name
      scopes
      Required
      Required
      Type
      []string
      Description

      The security rules scopes.

  • Name
    WithMiddleware()
    Optional
    Optional
    Type
    ApiOption
    Description
    • Name
      middleware
      Required
      Required
      Type
      HttpMiddleware
      Description

      The middleware (code) that should be run on all requests to the API. Useful for applying universal middleware such as CORS headers or Auth, across an entire API from a single place.

SecurityDefinition Parameters

  • Name
    JwtSecurityRule
    Optional
    Optional
    Type
    Description
    • Name
      kind
      Required
      Required
      Type
      string
      Description

      value must be jwt

    • Name
      issuer
      Required
      Required
      Type
      string
      Description

      the issuer for the JWT tokens e.g. https://account.region.auth0.com

    • Name
      audiences
      Required
      Required
      Type
      []string
      Description

      the aud that will be applied to JWT tokens from the issuer.

Examples

Create an API

import (
  "fmt"

  "github.com/nitrictech/go-sdk/nitric"
)

func main() {
  api, err := nitric.NewApi("public")
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}

Create an API with universal middleware

import (
  "fmt"

  "github.com/nitrictech/go-sdk/faas"
  "github.com/nitrictech/go-sdk/nitric"
)

func authMiddleware(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  // Perform auth validation
  return next(ctx)
}

func main() {
  api, err := nitric.NewApi("private", nitric.WithMiddleware(authMiddleware))
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}

Define middleware

func authMiddleware(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  // Perform auth validation
  return next(ctx)
}

Notes

Middleware functions are supplied an HttpContext object and a next() function which calls the next middleware in the chain.

Create an API with a base path

If you need to put all the routes in your api below a shared base path, you can do that with the WithPath option. In this example we ensure all routes start with /api/v1/ before the route specific path.

import (
  "fmt"

  "github.com/nitrictech/go-sdk/nitric"
)

func main() {
  v1Api, err := nitric.NewApi("public", nitric.WithPath("/api/v1/"))
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}

Apply JWT authentication to an API

import (
  "fmt"

  "github.com/nitrictech/go-sdk/nitric"
)

func main() {
  secureApi, err := nitric.NewApi(
    "secure",
    // define a security definition called 'user'
    nitric.WithSecurityJwtRule("user", nitric.JwtSecurityRule{
      Issuer: "https://example-issuer.com",
      Audiences: []string{ "YOUR-AUDIENCES" },
    }),
    // You can optionally apply security rules to the entire API
    nitric.WithSecurity(
      // apply the user security definition to the whole API
      "user",
      // Optionally apply required scopes to this api
      // in this case users will require the 'products:read' scope to access the API
      []string{"products:read"},
    ),
  )
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}