schloram / headless

TYPO3 JSON API providing content for PWA application

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TYPO3 Extension headless - JSON Content API for TYPO3 Headless solution

TYPO3 12 TYPO3 11 TYPO3 10 CI Status Latest Stable Version Total Downloads License Contributor Covenant Coverage Status

Headless

Headless allows you to render JSON from TYPO3 content. You can customize output by changing types, names and nesting of fields.

This extension provides backend part (JSON API) for TYPO3 PWA solution. Second part is a JavaScript application nuxt-typo3 which consumes JSON API and renders the content using Vue.js and Nuxt. See frontend documentation here: https://typo3-headless.github.io/nuxt-typo3/

If you have any questions just drop a line in #initiative-headless-pwa Slack channel.

URL
Repository: https://github.com/TYPO3-Headless/headless
Read online: https://docs.typo3.org/p/friendsoftypo3/headless/main/en-us/
TER: https://extensions.typo3.org/extension/headless/
Slack: https://typo3.slack.com/channels/initiative-headless-pwa

Features

  • JSON API for content elements
  • JSON API for page and meta data
  • JSON API for navigation, layouts
  • taking into account all language and translation configuration (e.g. fallback)
  • easily extendable with custom fields or custom content elements
  • custom data processors directly for headless usage
  • support for EXT:form
  • support for EXT:felogin
  • support for EXT:redirects
  • support for EXT:seo
  • [BETA] backend module for simulating page preview (with specific page type, lang, usergroup) see headless_dev_tools

Additional extensions and integrations

Requirements and compatibility

EXT:headless version TYPO3 support PHP support Status
>= 4.0 12 >= 8.1 Active development & support
>= 3.0 11 >= 7.4, <= 8.2 Active support
>= 2.0 9, 10 >= 7.2, <=7.4 Critical bugfixes only

Quickstart / Demo

If you want to take a look at working demo including frontend, backend and demo data, use our DDEV based demo project here: https://github.com/TYPO3-Initiatives/pwa-demo

Installation

Install extension using composer
composer require friendsoftypo3/headless

Then, you should include extension typoscript template, and you are ready to go. Also, please remember to don't use fluid styled content on the same page tree together with ext:headless.

Documentation

Extension documentation

Contributing

Alt

JSON Content Object

In headless extension we implemented new JSON Content Object, which allows you to specify what fields you want to output, and how they will look. First, let's take a look at simple example

lib.page = JSON
lib.page {
  fields {
    header = TEXT
    header {
      field = header
    }
  }
}

Output

{
    "header" : "headerFieldValue"
}

in addition, keyword fields allow you to nest multiple times fields in json, e.g.

lib.page = JSON
lib.page {
  fields {
    data {
      fields {
        foo = TEXT
        foo {
          field = bar
        }

        foo1 = TEXT
        foo1 {
          field = bar1
        }
      }
    }
  }
}

Output

{
    "data": [
        {
            "foo": "bar",
            "foo1": "bar1"
        }
    ]
}

INT, FLOAT & BOOL Content Objects for use in JSON Content Object

We introduce new simple content objects to improve JSON API response for frontend developers. We can set correct property types, so frontend does not have to deal with string values for fields with numeric values or field that should be true/false.

lib.page = JSON
lib.page {
  fields {
    data {
      fields {
        foo = INT
        foo {
          # db value of foo_field = 1
          field = foo_field
        }
        bar = BOOL
        bar {
          # db value of bar_field = 0
          field = bar_field
        }
      }
    }
  }
}

Output

{
    "data": [
        {
            "foo": 1,
            "bar": false
        }
    ]
}

Customizing

You can override every field in output using typoscript. This extension allows you to use standard typoscript objects such as TEXT, COA, CASE.

Page response

In headless v3.0 we introduce a new, smaller, faster and more flat page response. If you want to keep compatibility with your frontend application, you can load a deprecated typoscript template for version 2.x and keep the old structure of the response running.

Example page response ⬇️

since version 3.x & under active maintenance

image

Old response (version 2.x) ⬇️

image

DataProcessing

You can use Data Processors just like in FLUIDTEMPLATE Content Object, e.g.

lib.languages = JSON
lib.languages {
  dataProcessing {
    10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
    10 {
      languages = auto
      as = languages
    }
  }
}

Built in data processors

We provide multiple data processorors for headless usage

FilesProcessor

This processor should be used to process files (standard or media files). Also, it allows you to proccess images.

GalleryProcessor

Should be used along with FilesProcessor (chained). Used for processing mutliple media files.

MenuProcessor

Used for navigation. Works just like standard menu processor.

FlexFormProcessor

Used for proecessing flexforms.

RootSitesProcessor

Render your all headless sites configuration for your frontend application.

Configuration

Available Settings:

  • Not Enabled: Headless mode is deactivated.
  • Mixed Mode: Fluid and headless operate concurrently.
  • Fully Headless Mode: Headless mode is fully activated.

To set up headless mode, utilize the site configuration flag as shown below:

'headless': 0|1|2

While the legacy flag (true|false) is still recognized, transitioning to the integer notation is recommended.

Options:

  • 0 (formerly: false) = headless mode is deactivated for the site within the TYPO3 instance.
  • 1 (formerly: true) = headless mode is fully activated for the site within the TYPO3 instance.
  • 2 = mixed mode headless is activated (both fluid & json API are accessible within a single site in the TYPO3 instance).

Options 0 (formerly: false) or 1 (formerly: true) inform the extension to either fully disable or enable headless mode for a particular site.

To Enable Mixed Mode:

For a chosen site in TYPO3, follow these steps:

  • In the typoscript template for the site, load the "Headless - Mixed mode JSON response" setup file instead of the default headless one.
  • Set headless flag to a value of 2 in the site configuration file or configure the flag via editor in the Site's management backend.

The mixed mode flag (value of 2) instructs the EXT:headless extension to additionally check for the Accept header with a value of application/json when processing requests to the particular site in the TYPO3 instance.

  • In cases where a request lacks the Accept header or Accept has a different value than application/json, TYPO3 will respond with HTML content (standard TYPO3's response).
  • In cases where a request's header Accept matches the value of application/json, TYPO3 will respond with a JSON response.

Development

Development for this extension is happening as part of the TYPO3 PWA initiative, see https://typo3.org/community/teams/typo3-development/initiatives/pwa/ If you have any questions, join #initiative-headless-pwa Slack channel.

Credits

A special thanks goes to macopedia.com company, which is sponsoring development of this solution.

About

TYPO3 JSON API providing content for PWA application

License:GNU General Public License v2.0


Languages

Language:PHP 97.1%Language:HTML 2.9%Language:TypeScript 0.0%