Contributing
First you need to clone the repo and
Build
or
Test
to run tests locally, you need to setup environnement variables using .env
file from .env.example
and fill in the missing values
If you didn't add any new api, you should set MOCK_FETCH="true".
If you added new api and need to test against cloud providers, you should set
MOCK_FETCH="false" and RECORD_NETWORK_REQUESTS="true" to updated network request mock data.
WEBDAV quick guide
WEBDAV uses xml for all its data when communicating, the basic element is object
, multiple object
s can form a collection
, webdav server have account
s and an account
have a principal
resource (i.e the default, main resource) and under that principal resource we have home set
of the said resource where your actual resources are.
syncToken
and ctag
are basically like hash of the object/collection, if anything in it changes, this token will change.
For caldav, the calendar data in caldav are in rfc5545
ical format, there's iCal2Js
and js2iCal
function with my other project pretty-jcal to help your convert them from/to js objects.
Here's cheat sheet on webdav operations compared with rest:
Operation | Webdav | REST |
---|
Create collection | - predefined id:
MKCOL /entities/$predefined_id - no predefined id: not possible
- can set attributes right away with extended-mkcol extension
- Status: 201 Created
| POST /entities with JSON body with attributes, response contains new id- Status: 200 with new id and optionally the whole object
|
Create entity | - predefined id:
PUT /entities/$predefined_id with body, empty response - no predefined id:
POST /entities , receive id as part of Content-Location header - can't set attributes right away, need subsequent PROPPATCH
- Status: 201 Created
|
Update entity body | PUT /entities/$predefined_id with new body (no attributes)- Status: 204 No Content
| - Full:
PUT /entities/$id with full JSON body with attributes - Status 200, receive full object back
- Partial:
PATCH /entities/$id with partial JSON containing only attributes to update. - Status 200, full/partial object returned
|
Update entity attributes | PROPPATCH /entities/$id with XML body of attributes to change- Status: 207, XML body with accepted attributes
|
Delete entity | DELETE /entities/$id - Sattus: 204 no content
|
List entities | PROPFIND /entities with XML body of attributes to fetch- Status 207 multi-status XML response with multiple entities and their respective attributes
| GET /entities - Status: 200 OK, receive JSON response array with JSON body of entity attributes
|
Get entity | GET /entities/$id - Status: 200 OK with entitiy body
| GET /entities/$id - Status 200 OK, receive JSON body of entity attributes
|
Get entity attributes | PROPFIND /entities/$id with XML body of attributes to fetch- Status 207 multi-status XML response with entity attributes
|
Notes | - cannot always set attributes right away at creation time, need subsequent
PROPPATCH
| - no concept of body vs attributes
- entity can be either collection or model (for collection
/entities/$collectionId/$itemId )
|