spiral/writeaway

PHP API server for Writeaway editor

v0.4.0 2022-03-14 05:46 UTC

This package is auto-updated.

Last update: 2024-12-16 19:50:39 UTC


README

License:

MIT License (MIT). Please see LICENSE for more information. Maintained by Spiral Scout.

TODO

  • add tests for public services

Usage

  • Register WriteawayBootloader in the App

Note that it must be registered and after RouterBootloader.

  • Implement MetaProviderInterface
  • WriteawayCommandBootloader can be added if you want to have a reset command.

Note that it uses TokenizerBootloader so it must be registered before CommandsBootloader.

  • WriteawayViewsBootloader can be added if you want use ready views bundle.

API Endpoints:

List Images

GET or POST writeaway:images:list to fetch a full list of available images.

Example response:

{
  "status": 200,
  "data": [
    {
      "id": "unique-id",
      "src": "image1.png"
    },
    {
      "id": "unique-id",
      "thumbnailSrc": "image2-th.png",
      "src": "image2.png"
    }
  ]
}

Possible image fields:

Upload Image

POST writeaway:images:upload to upload an image file.

Example request:

image - FormData file

Example response:

{
  "status": 200,
  "data": [
    {
      "id": "unique-id",
      "src": "image1.png"
    }
  ]
}

For possible image fields see the previous endpoint.

Delete Image

POST or DELETE writeaway:images:delete to delete a particular image

Example request:

{
  "id": "unique-id"
}

Example response:

{
  "status": 200
}

Get Piece

GET or POST writeaway:pieces:get to fetch a particular piece by its id and type.

Example request:

{
  "id": "unique-id",
  "type": "piece-type"
}

If no pieces found, a new one wil be created. id is a unique value across all pieces.

Example response:

{
  "status": 200,
  "data": {
    "id": "unique-id",
    "type": "piece-type",
    "data": {
      "key": "value",
      "key...": "value..."
    }
  }
}

In case if validation errors the example response will be:

{
  "status": 400,
  "errors": {
    "field-name": "error-message",
    "field-name...": "error-message..."
  }
}

Get Pieces in bulk

GET or POST writeaway:pieces:bulk to fetch a particular pieces by theirs id and type.

Example request:

{
  "pieces": [
    {
      "id": "unique-id",
      "type": "piece-type"
    },
    {
      "id": "unique-id",
      "type": "piece-type"
    }
  ]
}

Example response:

{
  "status": 200,
  "data": [
    {
      "id": "unique-id",
      "type": "piece-type",
      "data": {
        "key": "value",
        "key...": "value..."
      }
    },
    {
      "id": "unique-id",
      "type": "piece-type",
      "data": {
        "key": "value",
        "key...": "value..."
      }
    }
  ]
}

Not found pieces will be ignored.

In case if validation errors the example response will be:

{
  "status": 400,
  "errors": {
    "field-name": "error-message",
    "field-name...": "error-message..."
  }
}

Save Piece

POST writeaway:pieces:save to save a particular piece by its id and type.

Example request:

{
  "id": "unique-id",
  "type": "piece-type",
  "data": {
    "key": "value",
    "key...": "value..."
  }
}

If no pieces found, a new one wil be created. id is a unique value across all pieces.

Example response:

{
  "status": 200,
  "data": {
    "id": "unique-id",
    "type": "piece-type",
    "data": {
      "key": "value",
      "key...": "value..."
    }
  }
}

In case if validation errors the example response will be:

{
  "status": 400,
  "errors": {
    "field-name": "error-message",
    "field-name...": "error-message..."
  }
}

Components

Meta

Meta is a structure designed to represent current piece editor. While this package knows nothing about real app actors, \Spiral\Writeaway\Service\Meta\ProviderInterface is given - a developer can bind it to a more rich implementation, so the meta will contain the real user's id, label and time. Example:

{
  "id": "some user id",
  "label": "some user label, such as name",
  "time": "current date time string"
}