Use more common X-Api-Key header with no prefix Also updates Unauthorized response to include a json error body and simplifies working with new API key via curl and the vscode rest client Signed-off-by: James Taylor <jamest@uk.ibm.com> |
||
|---|---|---|
| asset-transfer-basic/rest-api-typescript | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
Fabric REST sample
Prototype sample REST server to demonstrate good Fabric Node SDK practices for parts of FAB-18511
The primary aim of this sample is to show how to write a long running client application using the Fabric Node SDK
The REST API is intended to work with the basic asset transfer example
To install the basic asset transfer chaincode on a local Fabric network, follow the Using the Fabric test network tutorial
Usage
Note: these instructions should work with the release-2.2 branch of fabric-samples but later versions require some changes
To build and start the sample REST server, you'll need to download and install an LTS version of node
Clone this repository and change to the fabric-rest-sample/asset-transfer-basic/rest-api-typescript directory before running the following commands
Install dependencies
npm install
Build the REST server
npm run build
Create a .env file to configure the server for the test network (make sure TEST_NETWORK_HOME is set to the fully qualified test-network directory)
TEST_NETWORK_HOME=$HOME/fabric-samples/test-network npm run generateEnv
Start a Redis server
npm run start:redis
Start the sample REST server
npm run start:dev
REST API
If everything went well, you can now make basic asset transfer REST calls!
The examples below require a SAMPLE_APIKEY environment variable which must be set to an API key from the .env file created above.
For example, to use the ORG1_APIKEY...
SAMPLE_APIKEY=$(grep ORG1_APIKEY .env | cut -d '=' -f 2-)
Get all assets...
curl --header "X-Api-Key: ${SAMPLE_APIKEY}" http://localhost:3000/api/assets
Check whether an asset exists...
curl --include --header "X-Api-Key: ${SAMPLE_APIKEY}" --request OPTIONS http://localhost:3000/api/assets/asset7
Create an asset...
curl --include --header "Content-Type: application/json" --header "X-Api-Key: ${SAMPLE_APIKEY}" --request POST --data '{"id":"asset7","color":"red","size":42,"owner":"Jean","appraisedValue":101}' http://localhost:3000/api/assets
Read transaction status...
curl --header "X-Api-Key: ${SAMPLE_APIKEY}" http://localhost:3000/api/transactions/__transaction_id__
Read an asset...
curl --header "X-Api-Key: ${SAMPLE_APIKEY}" http://localhost:3000/api/assets/asset7
Update an asset...
curl --include --header "Content-Type: application/json" --header "X-Api-Key: ${SAMPLE_APIKEY}" --request PUT --data '{"id":"asset7","color":"red","size":11,"owner":"Jean","appraisedValue":101}' http://localhost:3000/api/assets/asset7
Transfer an asset...
curl --include --header "Content-Type: application/json" --header "X-Api-Key: ${SAMPLE_APIKEY}" --request PATCH --data '[{"op":"replace","path":"/owner","value":"Ashleigh"}]' http://localhost:3000/api/assets/asset7
Delete an asset...
curl --include --header "X-Api-Key: ${SAMPLE_APIKEY}" --request DELETE http://localhost:3000/api/assets/asset7