neomerx / json-api

Framework agnostic JSON API (jsonapi.org) implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Member names are converted to kebab-case

geoidesic opened this issue · comments

I'm passing through this data:

(
    [id] => 1
    [customer_name] => My Company
    [vat_registered] => 1
    [vat_number] => 12345678
    [vat_percentage] => 20
    [currency_symbol] => £
    [created] => Cake\I18n\FrozenTime Object
        (
            [date] => 2020-07-12 09:23:24.000000
            [timezone_type] => 3
            [timezone] => UTC
        )

    [modified] => Cake\I18n\FrozenTime Object
        (
            [date] => 2020-07-12 09:23:24.000000
            [timezone_type] => 3
            [timezone] => UTC
        )

    [[new]] => 
    [[accessible]] => Array
        (
            [customer_name] => 1
            [vat_registered] => 1
            [vat_number] => 1
            [vat_percentage] => 1
            [currency_symbol] => 1
            [created] => 1
            [modified] => 1
        )

    [[dirty]] => Array
        (
        )

    [[original]] => Array
        (
        )

    [[virtual]] => Array
        (
        )

    [[hasErrors]] => 
    [[errors]] => Array
        (
        )

    [[invalid]] => Array
        (
        )

    [[repository]] => Settings
)

This is passed like so: $encoder->encodeData($data);

The output converts the member names from snake-case to kebab-case.

{
  "data": {
    "type": "settings",
    "id": "1",
    "attributes": {
      "created": "2020-07-12T09:23:24+00:00",
      "modified": "2020-07-12T09:23:24+00:00",
      "customer-name": "My Company",
      "vat-registered": "1",
      "vat-number": "12345678",
      "vat-percentage": 20,
      "currency-symbol": "\u00a3"
    },
    "links": { "self": "/api/settings/1" }
  }
}

Note that e.g. vat_registered is converted to vat-registered.
This is problematic for a number of reasons:

  1. Kebab-case is not useful in most modern JavaScript frameworks – i.e. cannot be used in element directives and will not compile.
  2. The JSONAPI spec suggests that member names should be camelCase, not kebab-case: https://jsonapi.org/recommendations/

Please advise.

Actually this is not due to anything in this library. My bad.