.. _swh-provenance-grpc-api:
==================
Using the gRPC API
==================
.. highlight:: console
The gRPC API is the core API used to query the provenance database remotely. It uses the
`gRPC framework `_ to provide high-performance provenance answers
with server streaming.
Quickstart
==========
Building the server
-------------------
Get Rust >= 1.79, eg. with `rustup `_.
Run::
RUSTFLAGS="-C target-cpu=native" cargo install --locked https://gitlab.softwareheritage.org/swh/devel/swh-provenance.git
Or::
git clone https://gitlab.softwareheritage.org/swh/devel/swh-provenance.git
cd swh-provenance
cargo build --release
Getting a provenance database
-----------------------------
::
pip3 install awscli
aws s3 cp --no-sign-request --recursive s3://softwareheritage/derived_datasets/2024-12-06/provenance/all/ provenance-2024-12-06/
You also need a local graph. Either use ``swh graph download`` to download a full graph, or get
only the minimal set of required files with::
aws s3 cp --no-sign-request s3://softwareheritage/graph/2024-12-06/compressed/graph.pthash graph-2024-12-06/
aws s3 cp --no-sign-request s3://softwareheritage/graph/2024-12-06/compressed/graph.pthash.order graph-2024-12-06/
aws s3 cp --no-sign-request s3://softwareheritage/graph/2024-12-06/compressed/graph.node2swhid.bin graph-2024-12-06/
aws s3 cp --no-sign-request s3://softwareheritage/graph/2024-12-06/compressed/graph.node2type.bin graph-2024-12-06/
Starting the server
-------------------
Before the first start, you need to build database indexes::
$ swh-provenance-index --database file:///provenance-2024-12-06/ --indexes provenance-2024-12-06-indexes/
Or, if you installed from Git::
$ cargo run --release --bin swh-provenance-index -- --database file:///provenance-2024-12-06/ --indexes provenance-2024-12-06-indexes/
The gRPC server is automatically started on port 50091 when the HTTP server
is started with::
$ swh-provenance-grpc-serve --graph graph-2024-12-06/ --database file:///provenance-2024-12-06/ --indexes provenance-2024-12-06-indexes/
Or, if you installed from Git::
$ cargo run --release --bin swh-graph-grpc-serve -- --graph graph-2024-12-06/ --database file:///provenance-2024-12-06/ --indexes provenance-2024-12-06-indexes/
Running queries
---------------
The `gRPC command line tool
`_
can be an easy way to query the gRPC API from the command line. It is
invoked with the ``grpc_cli`` command. Of course, it is also possible to use
a generated RPC client in any programming language supported by gRPC.
All RPC methods are defined in the service ``swh.provenance.ProvenanceService``.
The available endpoints can be listed with ``ls``::
$ rpc_cli ls localhost:50141 swh.provenance.ProvenanceService
WhereIsOne
WhereAreOne
A RPC method can be called with the ``call`` subcommand.::
$ grpc_cli call localhost:50141 swh.provenance.ProvenanceService.WhereIsOne "swhid: 'swh:1:cnt:27766b99cdcab4e9b68501c3b50f1712e016c945'"
swhid: "swh:1:cnt:27766b99cdcab4e9b68501c3b50f1712e016c945"
anchor: "swh:1:rev:1564a9e70426251655286156957f8d710f0db278"