Files
Cmd/API.md

3.6 KiB

API

The API is intended to be used by a local full standalone client that provides a frontend for the end-user. The API allows to use Peernet effectively; it provides functions to share files, search for content and download files.

Note: This API code is likely to be moved into the core soon.

Use considerations

It is not intended to be directly used in a legacy web browser, and shall not be exposed to the internet. It shall only run on a loopback IP such as 127.0.0.1 or ::1. Special HTTP headers (including the Access-Control headers) are intentionally not set.

The API is currently unauthenticated and intentionally provides direct access to the users blockchain.

Notes

The API is still in development and endpoints are subject to change. The API should be currently only used for debugging and early phase development purposes.

Configuartion

The configuration file (default Config.yaml) contains settings for the API. To listen on http://127.0.0.1:112/ add this line:

APIListen: ["127.0.0.1:112"]

Overview

These are the functions provided by the API:

/status                     Provides current connectivity status to the network
/peer/self                  Provides information about the self peer details
/share/list                 List all files and directories that are shared
/share/file                 Share a file via the peers blockchain

/search                     Search Peernet for a file based on keywords or hash
/download/start             Download a file based on a hash
/download/status            Get the status of a download

/status/ws                  Starts a websocket to receive updates on operations immediately (push instead of pull)
/console                    Console provides a websocket to send/receive internal commands

/blockchain/self/header     Header of the self peers blockchain
/blockchain/self/read       Read the self peers blockchain
/blockchain/self/append     Add a record to the blockchain

The /share functions are providing high-level functionality to work with files. The /blockchain functions provide low-level functionality which is typically not needed.

Status

This function informs about the current connection status of the client to the network. Additional fields will be added in the future.

Request:    GET /status

Response:   200 with JSON structure apiResponseStatus
type apiResponseStatus struct {
	Status        int  `json:"status"`        // Status code: 0 = Ok.
	IsConnected   bool `json:"isconnected"`   // Whether connected to Peernet.
	CountPeerList int  `json:"countpeerlist"` // Count of peers in the peer list. Note that this contains peers that are considered inactive, but have not yet been removed from the list.
}

Example response data: Todo

Self Information

This function returns information about the current peer.

Request:    GET /peer/self

Response:   200 with JSON structure apiResponsePeerSelf

The peer and node IDs are returned as hex encoded strings.

type apiResponsePeerSelf struct {
	PeerID string `json:"peerid"` // Peer ID. This is derived from the public in compressed form.
	NodeID string `json:"nodeid"` // Node ID. This is the blake3 hash of the peer ID and used in the DHT.
}

Example response data: Todo

Console

The /console websocket allows to execute internal commands. This should be only used for debugging purposes by the end-user. The same input and output as raw text as via the command-line is provided through this endpoint.

Request:    ws://127.0.0.1:112/console