| # APID |
| |
| Apid is a container for publishing APIs that provides core services to its plugins including configuration, |
| API publishing, data access, and a local pub/sub event system. |
| |
| ## To build and run standalone |
| |
| cd cmd/apid |
| glide install |
| go build |
| ./apid |
| |
| For command line options: |
| |
| ./apid -help |
| |
| # Configuration |
| |
| Configuration can be done via yaml file or environment variables. Keys are case-insensitive. |
| By default, apid will look for a file called apid_config.yaml in the current working directory. |
| |
| #### Environment variables |
| |
| Config will pick up env vars automatically. Use "apid_" as a prefix for settings. For example, for apid's "log_level" |
| configuration setting, set env var "apid_log_level". |
| |
| ### Defaults |
| |
| api_port: 9000 |
| api_expvar_path: nil # not exposed |
| data_path: /var/tmp |
| events_buffer_size: 5 |
| log_level: debug # valid values: Debug, Info, Warning, Error, Fatal, Panic |
| |
| # Services |
| |
| apid provides the following services: |
| |
| * apid.API() |
| * apid.Config() |
| * apid.Data() |
| * apid.Events() |
| * apid.Log() |
| |
| ### Initialization of services and plugins |
| |
| A driver process must initialize apid and its plugins like this: |
| |
| apid.Initialize(factory.DefaultServicesFactory()) // when done, all services are available |
| apid.InitializePlugins() // when done, all plugins are running |
| api := apid.API() // access the API service |
| err := api.Listen() // start the listener |
| |
| |
| Once apid.Initialize() has been called, all services are accessible via the apid package functions as details above. |
| |
| # Plugins |
| |
| The only requirement of an apid plugin is to register itself upon init(). However, generally plugins will access |
| the Log service and some kind of driver (via API or Events), so it's common practice to see something like this: |
| |
| var log apid.LogService |
| |
| func init() { |
| apid.RegisterPlugin(initPlugin) |
| } |
| |
| func initPlugin(services apid.Services) error { |
| |
| log = services.Log().ForModule("myPluginName") // note: could also access via `apid.Log().ForModule()` |
| |
| services.API().HandleFunc("/verifyAPIKey", handleRequest) |
| } |
| |
| func handleRequest(w http.ResponseWriter, r *http.Request) { |
| // respond to request |
| } |
| |
| # Helpful Hints |
| |
| * Use `export APID_DATA_TRACE_LOG_LEVEL=debug` to see DB Tracing |