Skip to content

arbor-dev/arbor

Repository files navigation

alt tag Build Status GoDoc Join the chat at https://acm-uiuc.slack.com/messages/C6XGZD212/ Go Report Card

Arbor is a statically configured framework for creating API Gateways. It provides the following capabilities:

  • Easy registration of services
  • Basic application authorization and request sanitization
  • Proxying API calls
  • Managing inter-service communication

Arbor supports JSON APIs with support for others coming soon. When registering as service specify the data encoding and when requesting a resource though groot make the request using json.

Registering Services

Add the API spec in a new file (ex. todo.go) in the services package

There is a set of proxy api calls defined in the proxy package that will route call to the backend services

AS OF 10/28/15

/**
 *  Pass the http Request from the client and the ResponseWriter it expects
 *  Pass the target url of the backend service (not the url the client called)
 *  Pass the format of the service
 *  Pass a authorization token (optional)
 *  Will call the service and return the result to the client.
 **/
 func GET(w http.ResponseWriter, url string, format string, token string, r *http.Request)
 /**
  *  Pass the http Request from the client and the ResponseWriter it expects
  *  Pass the target url of the backend service (not the url the client called)
  *  Passes the encoded json(only format currently supported) to the service.
  *  Pass a authorization token (optional)
  *  Will call the service and return the result to the client.
  **/
  func POST(w http.ResponseWriter, url string, format string, token string, r *http.Request)
 /**
  *  Pass the http Request from the client and the ResponseWriter it expects
  *  Pass the target url of the backend service (not the url the client called)
  *  Passes the encoded json(only format currently supported) to the service.
  *  Pass a authorization token (optional)
  *  Will call the service and return the result to the client.
  **/
  func PUT(w http.ResponseWriter, url string, format string, token string, r *http.Request)
/**
 *  Pass the http Request from the client and the ResponseWriter it expects
 *  Pass the target url of the backend service (not the url the client called)
 *  Pass a authorization token (optional)
 *  Will call the service and return the result to the client.
 **/
 func DELETE(w http.ResponseWriter, url string, format string, token string, r *http.Request)

All secret data should be kept in a file called config.go in the config directory

Install

Minimum supported version is Go 1.8

go get -u github.com/arbor-dev/arbor/...

run the server

go run ./server/*.go

compile the service

go build -o groot [PATH TO GROOT]/server

CLI

groot [-r | --register-client client_name] [-c | --check-registration token] [-u | --unsecured]

-r | --register-client client_name

registers a client, generates a token

-c | --check-registration token

checks if a token is valid and returns name of client

-u | --unsecured

runs groot without the security layer

-l | --list-clients

lists all registered client names

-d | --delete-client client_name

deletes the client token with the given name

without args

runs groot with the security layer

License

This project is licensed under the University of Illinois/NCSA Open Source License. For a full copy of this license take a look at the LICENSE file.

When contributing new files to this project, preappend the following header to the file as a comment:

Copyright © 2017, ACM@UIUC

This file is part of the Groot Project.  
 
The Groot Project is open source software, released under the University of Illinois/NCSA Open Source License. 
You should have received a copy of this license in a file with the distribution.