Difference between revisions of "User:Saul/feathers"

From Organic Design wiki
m (Patch)
(Create)
 
(6 intermediate revisions by the same user not shown)
Line 17: Line 17:
 
feathers generate authentication
 
feathers generate authentication
 
</source>
 
</source>
 +
Authentication methods include:
 +
<source>
 +
Username + Password (Local)
 +
Auth0
 +
Google
 +
Facebook
 +
GitHub
 +
</source>
 +
 
== Services ==
 
== Services ==
 
Services are a way to set up the REST API for a service like messages, users, channels, ect.
 
Services are a way to set up the REST API for a service like messages, users, channels, ect.
Line 55: Line 64:
 
curl "http://localhost:3030/service" \
 
curl "http://localhost:3030/service" \
 
-H "Content-Type: application/json" \
 
-H "Content-Type: application/json" \
--data-binary "{ 'email': 'feathers@example.com', 'password': 'secret' }";
+
--data-binary '{ "email": "feathers@example.com", "password": "secret" }';
 
</source>
 
</source>
 +
 
=== Authenticate ===
 
=== Authenticate ===
 
Create (POST /authentication) – authenticates a user
 
Create (POST /authentication) – authenticates a user
Line 62: Line 72:
 
curl "http://localhost:3030/authetication" \
 
curl "http://localhost:3030/authetication" \
 
-H "Content-Type: application/json" \
 
-H "Content-Type: application/json" \
--data-binary "{ 'strategy': 'local', 'email': 'feathers@example.com', 'password': 'secret' }";
+
--data-binary '{ "strategy": "local", "email": "feathers@example.com", "password": "secret" }';
 +
</source>
 +
 
 +
==== Sending Auth Token ====
 +
To send the auth token with the command just add:
 +
<source lang="bash">
 +
-H "Authorization: <your access token>"
 +
</source>
 +
For example:
 +
<source lang="bash">
 +
curl "http://localhost:3030/service/123abc" \
 +
-X PATCH \
 +
-H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJ1c2VySWQiOiI1YjcwYzU3MjM5MTU0NDc5NzJjZGUzZDUiLCJpYXQiOjE1MzQxMTkxMDgsImV4cCI6MTUzNDIwNTUwOCwiYXVkIjoiaHR0cHM6Ly95b3VyZG9tYWluLmNvbSIsImlzcyI6ImZlYXRoZXJzIiwic3ViIjoiYW5vbnltb3VzIiwianRpIjoiNWY3ZDY5YjktOWUxZS00NTgxLWFiMTItNjFkZmIxOTYxOGZkIn0.S_QHDjNf7DAp6-ZI3d_JpWgcMneBqfpkB2GgX_6eLwI" \
 +
-H "Content-Type: application/json" \
 +
--data-binary '{ "someProperty": "someValue" }'
 
</source>
 
</source>
 +
 
=== Get ===
 
=== Get ===
 
Get (GET /tasks/:id) – finds a single document by id
 
Get (GET /tasks/:id) – finds a single document by id
Line 76: Line 101:
 
</source>
 
</source>
 
<source lang="bash">
 
<source lang="bash">
curl "http://localhost:3030/service?someProperty=someValue" \
+
curl "http://localhost:3030/service?someProperty=someValue"
-GET
 
 
</source>
 
</source>
  
Line 84: Line 108:
 
<source lang="bash">
 
<source lang="bash">
 
curl "http://localhost:3030/service/123abc" \
 
curl "http://localhost:3030/service/123abc" \
-X PUT
+
-X PUT \
-H "Content-Type: application/json"
+
-H "Content-Type: application/json" \
 
--data-binary '{ "someProperty": "someValue", "anotherProperty": "anotherValue" }'
 
--data-binary '{ "someProperty": "someValue", "anotherProperty": "anotherValue" }'
 
</source>
 
</source>

Latest revision as of 01:00, 28 August 2018

Feathers is a lightweight framework for setting up REST API's and realtime events.

Install

CLI

Install the cli to get started with you feathers application quickly.

npm install -g @feathersjs/cli

App

To get feathers to generate the app run:

feathers generate app

Authentication

To generate a authentication method use:

feathers generate authentication

Authentication methods include:

Username + Password (Local)
Auth0
Google
Facebook
GitHub

Services

Services are a way to set up the REST API for a service like messages, users, channels, ect.

feathers generate service

Hooks

To generate a hook via the command line run:

feathers generate hook

Setup

TBC

Usage

Reverse Pagination

The best way that I have found to get the latest objects in the database is to use $sort like so:

app.service("messages").find({
	query: {
		$limit: 10,
		$sort: {
			createdAt: -1
		}
	}
}).then(res => {
	const latestData = res.data.reverse();
};

Manipulating MongoDB Arrays

https://docs.mongodb.com/manual/reference/operator/update-array/

Curl

Curl can be useful to test services as you create them.

Create

Create (POST /service) – creates a new document

curl "http://localhost:3030/service" \
	-H "Content-Type: application/json" \
	--data-binary '{ "email": "feathers@example.com", "password": "secret" }';

Authenticate

Create (POST /authentication) – authenticates a user

curl "http://localhost:3030/authetication" \
	-H "Content-Type: application/json" \
	--data-binary '{ "strategy": "local", "email": "feathers@example.com", "password": "secret" }';

Sending Auth Token

To send the auth token with the command just add:

-H "Authorization: <your access token>"

For example:

curl "http://localhost:3030/service/123abc" \
	-X PATCH \
	-H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJ1c2VySWQiOiI1YjcwYzU3MjM5MTU0NDc5NzJjZGUzZDUiLCJpYXQiOjE1MzQxMTkxMDgsImV4cCI6MTUzNDIwNTUwOCwiYXVkIjoiaHR0cHM6Ly95b3VyZG9tYWluLmNvbSIsImlzcyI6ImZlYXRoZXJzIiwic3ViIjoiYW5vbnltb3VzIiwianRpIjoiNWY3ZDY5YjktOWUxZS00NTgxLWFiMTItNjFkZmIxOTYxOGZkIn0.S_QHDjNf7DAp6-ZI3d_JpWgcMneBqfpkB2GgX_6eLwI" \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue" }'

Get

Get (GET /tasks/:id) – finds a single document by id

curl "http://localhost:3030/service/123abc"

Find

Find (GET /tasks) – finds all the documents matching the query (optional), also supports sorting and pagination

curl "http://localhost:3030/service"
curl "http://localhost:3030/service?someProperty=someValue"

Update

Update (PUT /tasks/:id) – updates the whole document by overwriting it with provided one (missing fields will be cleared)

curl "http://localhost:3030/service/123abc" \
	-X PUT \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue", "anotherProperty": "anotherValue" }'

Patch

Patch (PATCH /tasks/:id) – updates only the fields provided (missing fields will remain untouched)

curl "http://localhost:3030/service/123abc" \
	-X PATCH \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue" }'

Remove

Remove (DELETE /tasks/:id) – removes the document

curl "http://localhost:3030/service/123abc" \
	-X DELETE

Troubleshooting

Client Authentication

I had an issue where the client authenticated and I received the authentication token but when I use a service it says that I'm not authenticated.
The solution was to ensure that the client setup the transport before the authentication.