REST server to interact with NeoFS.
NeoFS REST Gateway bridges NeoFS internal protocol and REST API server.
Before building make sure you have the following tools:
- go
- make
- git
- curl
- docker
First clone this repository:
$ git clone https://github.com/nspcc-dev/neofs-rest-gw
Then run make to build bin/neofs-rest-gw
binary:
$ make
Or you can build it using docker:
$ make docker/all
If you change the spec file you have to re-generate server code.
You have several approaches:
- Run make. It automatically downloads
oapi-codegen
and generates boilerplate.
$ make
- Generate code separately:
$ make generate-server
Notable make targets:
dep Check and ensure dependencies
image Build clean docker image
image-dirty Build dirty docker image with host-built binaries
formats Run all code formatters
lint Run linters
version Show current version
generate-server Generate boilerplate by spec
Or you can also use a Docker image provided for released
(and occasionally unreleased) versions of gateway (:latest
points to the latest stable release).
REST gateway itself is not a NeoFS node, so to access NeoFS it uses node's gRPC interface and you need to provide some
node that it will connect to. This can be done either via -p
parameter or via REST_GW_POOL_PEERS_<N>_ADDRESS
and
REST_GW_POOL_PEERS_<N>_WEIGHT
environment variables (the gate supports multiple NeoFS nodes with weighted load balancing).
If you're launching REST gateway in bundle with neofs-dev-env, you can get
an IP address of the node in output of make hosts
command
(with s0*.neofs.devenv name).
These two commands are functionally equivalent, they run the gate with one backend node (and otherwise default settings):
$ neofs-rest-gw -p 192.168.130.72:8080
$ REST_GW_POOL_PEERS_0_ADDRESS=192.168.130.72:8080 neofs-rest-gw
It's also possible to specify uri scheme (grpc or grpcs) when using -p
:
$ neofs-rest-gw -p grpc://192.168.130.72:8080
$ REST_GW_POOL_PEERS_0_ADDRESS=grpcs://192.168.130.72:8080 neofs-rest-gw
In general, everything available as CLI parameter can also be specified via environment variables, so they're not
specifically mentioned in most cases (see --help
also). If you prefer a config file you can use it in yaml format.
See config and defaults for example.
$ neofs-rest-gw --config config.yaml
You can see swagger specification using the following url
(suppose you ran rest-gw on localhost:8090
):
Using %
in path parameters leads to error. For instance, getting object by attribute:
- /v1/get_by_attribute/A9pnctophx5PFt4eUd8d2aa6otjgnQZNzyvt3HCeygFD/cat%25jpeg/cat%25jpeg
cat%25jpeg - already URL escaped string, original value is cat%jpeg.
Also, when you run rest-gw, you will see a line similar to:
...
2024/02/12 13:21:31 Serving neofs rest gw at http://192.168.130.72:8080
You will find an auto-redirect to the specification page via this link.
See docs/migration-from-http.md.
Feel free to contribute to this project after reading the contributing guidelines.
Before starting to work on a certain topic, create a new issue first, describing the feature/topic you are going to implement.
This project is licensed under the GNU GPL v3 License - see the LICENSE file for details.