Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhaul of Parse Server Guide #809

Open
wants to merge 29 commits into
base: gh-pages
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8cb0260
update server guide
dblythy Jan 4, 2021
db64ac4
Update experimental.md
dblythy Jan 4, 2021
1997c9c
Update usage.md
dblythy Jan 5, 2021
1a32324
include config and security
dblythy Feb 1, 2021
2675ada
Merge branch 'serverGuide' of https://github.com/dblythy/docs into se…
dblythy Feb 1, 2021
0e4e3c0
Update _includes/parse-server/adapters.md
dblythy Feb 2, 2021
769c845
Update _includes/parse-server/bleeding-edge.md
dblythy Feb 2, 2021
1287301
Update _includes/parse-server/experimental.md
dblythy Feb 2, 2021
dc9d002
Update _includes/parse-server/experimental.md
dblythy Feb 2, 2021
7e3dc71
Update _includes/parse-server/logging.md
dblythy Feb 2, 2021
15947a7
Update _includes/parse-server/logging.md
dblythy Feb 2, 2021
db0fd81
update
dblythy Feb 2, 2021
4ae08b3
Merge branch 'serverGuide' of https://github.com/dblythy/docs into se…
dblythy Feb 2, 2021
f44eb1c
Revert "update"
dblythy Feb 2, 2021
10a3a45
recommit
dblythy Feb 2, 2021
d1b34ce
Update _includes/parse-server/logging.md
dblythy Feb 2, 2021
4b912f6
fix formatting
TomWFox Feb 10, 2021
eb715a3
reordering email section & nits
TomWFox Feb 10, 2021
eec4cdb
nits
TomWFox Feb 10, 2021
e7437c3
nit
TomWFox Feb 10, 2021
198c568
remove migration guide contents
TomWFox Feb 10, 2021
6e843fc
Update _includes/parse-server/experimental.md
dblythy Feb 11, 2021
2369495
Update _includes/common/security.md
dblythy Feb 11, 2021
6c6f032
add localization
dblythy Feb 11, 2021
93c1902
Update experimental.md
dblythy Feb 11, 2021
b4cfa74
Update experimental.md
dblythy Feb 11, 2021
859b535
Apply suggestions from code review
TomWFox May 26, 2021
ed55f5d
improve experimental note
TomWFox May 26, 2021
9ba83e9
improve direct access explanation
TomWFox May 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions _includes/common/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ Take a look at the following query to retrieve GameScore objects:

{% if page.language == "js" %}
```javascript
var GameScore = Parse.Object.extend("GameScore");
var query = new Parse.Query(GameScore);
const GameScore = Parse.Object.extend("GameScore");
const query = new Parse.Query(GameScore);
query.equalTo("score", 50);
query.containedIn("playerName",
["Jonathan Walsh", "Dario Wunsch", "Shawn Simon"]);
Expand Down Expand Up @@ -181,8 +181,8 @@ For example, let's say you're tracking high scores for a game in a GameScore cla

{% if page.language == "js" %}
```javascript
var GameScore = Parse.Object.extend("GameScore");
var query = new Parse.Query(GameScore);
const GameScore = Parse.Object.extend("GameScore");
const query = new Parse.Query(GameScore);
query.notEqualTo("playerName", "Michael Yabuti");
query.find().then(function(results) {
// Retrieved scores successfully
Expand Down Expand Up @@ -269,7 +269,7 @@ For example if the User class has a column called state which has values “Sign

{% if page.language == "js" %}
```javascript
var query = new Parse.Query(Parse.User);
const query = new Parse.Query(Parse.User);
query.notEqualTo("state", "Invited");
```
{% endif %}
Expand Down
5 changes: 4 additions & 1 deletion _includes/common/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -547,10 +547,13 @@ The master key should be used carefully. setting `useMasterKey` to `true` only i

```js
Parse.Cloud.define("like", async request => {
var post = new Parse.Object("Post");
const post = new Parse.Object("Post");
post.id = request.params.postId;
post.increment("likes");
await post.save(null, { useMasterKey: true })
}, {
fields: ['postId'],
requireUser: true
dblythy marked this conversation as resolved.
Show resolved Hide resolved
});
```

Expand Down
7 changes: 7 additions & 0 deletions _includes/parse-server/adapters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Adapters

All official adapters are distributed as scoped pacakges on [npm (@parse)](https://www.npmjs.com/search?q=scope%3Aparse).

Some well maintained adapters are also available on the [Parse Server Modules](https://github.com/parse-server-modules) organization.
TomWFox marked this conversation as resolved.
Show resolved Hide resolved
dblythy marked this conversation as resolved.
Show resolved Hide resolved

You can also find more adapters maintained by the community by searching on [npm](https://www.npmjs.com/search?q=parse-server%20adapter&page=1&ranking=optimal).
46 changes: 46 additions & 0 deletions _includes/parse-server/backers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Contributors

This project exists thanks to all the people who contribute... we'd love to see your face on this list!

<a href="https://github.com/parse-community/parse-server/graphs/contributors"><img src="https://opencollective.com/parse-server/contributors.svg?width=890&button=false" /></a>

dblythy marked this conversation as resolved.
Show resolved Hide resolved
# Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor!](https://opencollective.com/parse-server#sponsor)

<a href="https://opencollective.com/parse-server/sponsor/0/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/1/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/2/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/3/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/4/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/5/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/6/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/7/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/8/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/9/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/10/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/10/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/11/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/11/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/12/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/12/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/13/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/13/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/14/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/14/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/15/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/15/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/16/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/16/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/17/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/17/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/18/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/18/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/19/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/19/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/20/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/20/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/21/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/21/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/22/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/22/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/23/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/23/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/24/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/24/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/25/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/25/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/26/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/26/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/27/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/27/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/28/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/28/avatar.svg"></a>
<a href="https://opencollective.com/parse-server/sponsor/29/website" target="_blank"><img src="https://opencollective.com/parse-server/sponsor/29/avatar.svg"></a>

# Backers

Support us with a monthly donation and help us continue our activities. [Become a backer!](https://opencollective.com/parse-server#backer)

<a href="https://opencollective.com/parse-server#backers" target="_blank"><img src="https://opencollective.com/parse-server/backers.svg?width=890" /></a>
9 changes: 9 additions & 0 deletions _includes/parse-server/bleeding-edge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Want to ride the bleeding edge?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need an extra page for 1 sentence?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could perhaps remove this entirely as it's 'how to use npm packages' info rather than 'how to use Parse Server'.

Anyone that doesn't know about how to use the master branch before reading this probably shouldn't be anyway.


It is recommend to use builds deployed npm for many reasons, but if you want to use
dblythy marked this conversation as resolved.
Show resolved Hide resolved
the latest not-yet-released version of parse-server, you can do so by depending
directly on this branch:

```
npm install parse-community/parse-server.git#master
```
5 changes: 2 additions & 3 deletions _includes/parse-server/development.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Development Guide

We really want Parse to be yours, to see it grow and thrive in the open source community. Please see the [Contributing to Parse Server notes](https://github.com/parse-community/parse-server/blob/master/CONTRIBUTING.md).

## Running Parse Server for development

Normally, when you run a standalone Parse Server, the [latest release that has been pushed to npm](https://www.npmjs.com/package/parse-server) will be used. This is great if you are interested in just running Parse Server, but if you are developing a new feature or fixing a bug you will want to use the latest code on your development environment.
Expand Down Expand Up @@ -59,6 +61,3 @@ The following is a breakdown of the various files you will find in the Parse Ser
* [triggers.js](https://github.com/parse-community/parse-server/wiki/triggers.js) - cloud code methods for handling database trigger events
* [users.js](https://github.com/parse-community/parse-server/wiki/users.js) - handle the /users and /login routes

## Contributing

We really want Parse to be yours, to see it grow and thrive in the open source community. Please see the [Contributing to Parse Server notes](https://github.com/parse-community/parse-server/blob/master/CONTRIBUTING.md).
50 changes: 50 additions & 0 deletions _includes/parse-server/experimental.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Experimental

Experimental Features are items that we are experimenting with that will eventually become full features, or items that will be removed from the system if they are proven to not work well.
dblythy marked this conversation as resolved.
Show resolved Hide resolved

These features may not be approprate for production, so use at your own risk.

## Direct Access

* `directAccess`: Replaces HTTP Interface when using JS SDK in current node runtime. This may improve performance, along with `enableSingleSchemaCache` set to `true`.
dblythy marked this conversation as resolved.
Show resolved Hide resolved

## Idempotency

This feature deduplicates identical requests that are received by Parse Server mutliple times, typically due to network issues or network adapter access restrictions on mobile operating systems.

Identical requests are identified by their request header `X-Parse-Request-Id`. Therefore a client request has to include this header for deduplication to be applied. Requests that do not contain this header cannot be deduplicated and are processed normally by Parse Server. This means rolling out this feature to clients is seamless as Parse Server still processes request without this header when this feature is enbabled.

This feature needs to be enabled on the client side to send the header and on the server to process the header. Refer to the specific Parse SDK docs to see whether the feature is supported yet.

Deduplication is only done for object creation and update (`POST` and `PUT` requests). Deduplication is not done for object finding and deletion (`GET` and `DELETE` requests), as these operations are already idempotent by definition.

Configutation:
```js
let api = new ParseServer({
idempotencyOptions: {
paths: [".*"], // enforce for all requests
ttl: 120 // keep request IDs for 120s
}
}
```
Parameters:

* `idempotencyOptions` (`Object`): Setting this enables idempotency enforcement for the specified paths.
* `idempotencyOptions.paths`(`Array<String>`): An array of path patterns that have to match the request path for request deduplication to be enabled.
* The mount path must not be included, for example to match the request path `/parse/functions/myFunction` specify the path pattern `functions/myFunction`. A trailing slash of the request path is ignored, for example the path pattern `functions/myFunction` matches both `/parse/functions/myFunction` and `/parse/functions/myFunction/`.
dblythy marked this conversation as resolved.
Show resolved Hide resolved

Examples:

* `.*`: all paths, includes the examples below
* `functions/.*`: all functions
* `jobs/.*`: all jobs
* `classes/.*`: all classes
* `functions/.*`: all functions
* `users`: user creation / update
* `installations`: installation creation / update

* `idempotencyOptions.ttl`: The duration in seconds after which a request record is discarded from the database. Duplicate requests due to network issues can be expected to arrive within milliseconds up to several seconds. This value must be greater than `0`.

#### Notes

- This feature is currently only available for MongoDB and not for Postgres.
Loading