REST interface

REST interfaces are popular in CRUD applications as it provides a clean and well defined interface between the client and server. Editor can be fully integrated with a REST environment through its ability to specify different URLs for the create, edit and remove actions of Editor. This is done by giving ajax as an object with the create, edit and remove properties specified with the URL to use for each action, as shown in this example.

In addition to being able to specify a unique URL for each action, you can also specify full jQuery Ajax options for each action by giving the Ajax properties as an object. In this example the type option is used to specify the HTTP method to be used for each action, as REST interfaces typically require. Note also that the server returns a 400 Bad request response to invalid data, which is correctly handled by Editor.

Editor's ajax.replacements object can also be useful when working with a REST API - it allows a list of keys to be replaced in the URL based on the data being submitted. Each key is assigned a function that you would return the replacement value for. By default, as shown in this example, Editor will replace {id} with the id of the row(s) being edited or deleted.

Name Position Office Extn. Start date Salary
Name Position Office Extn. Start date Salary
  • Javascript
  • HTML
  • CSS
  • Ajax
  • Server-side script
  • Comments

The Javascript shown below is used to initialise the table shown in this example:

var editor = new DataTable.Editor({ ajax: { create: { type: 'POST', url: '../php/rest/create.php' }, edit: { type: 'PUT', url: '../php/rest/edit.php' }, remove: { type: 'DELETE', url: '../php/rest/remove.php?id={id}' } }, fields: [ { label: 'First name:', name: 'first_name' }, { label: 'Last name:', name: 'last_name' }, { label: 'Position:', name: 'position' }, { label: 'Office:', name: 'office' }, { label: 'Extension:', name: 'extn' }, { label: 'Start date:', name: 'start_date', type: 'datetime' }, { label: 'Salary:', name: 'salary' } ], table: '#example' }); $('#example').DataTable({ ajax: '../php/rest/get.php', columns: [ { data: null, render: function (data, type, row) { // Combine the first and last names into a single table field return data.first_name + ' ' + data.last_name; } }, { data: 'position' }, { data: 'office' }, { data: 'extn' }, { data: 'start_date' }, { data: 'salary', render: DataTable.render.number(null, null, 0, '$') } ], layout: { topStart: { buttons: [ { extend: 'create', editor: editor }, { extend: 'edit', editor: editor }, { extend: 'remove', editor: editor } ] } }, select: true });
const editor = new DataTable.Editor({ ajax: { create: { type: 'POST', url: '../php/rest/create.php' }, edit: { type: 'PUT', url: '../php/rest/edit.php' }, remove: { type: 'DELETE', url: '../php/rest/remove.php?id={id}' } }, fields: [ { label: 'First name:', name: 'first_name' }, { label: 'Last name:', name: 'last_name' }, { label: 'Position:', name: 'position' }, { label: 'Office:', name: 'office' }, { label: 'Extension:', name: 'extn' }, { label: 'Start date:', name: 'start_date', type: 'datetime' }, { label: 'Salary:', name: 'salary' } ], table: '#example' }); new DataTable('#example', { ajax: '../php/rest/get.php', columns: [ { data: null, render: (data) => data.first_name + ' ' + data.last_name }, { data: 'position' }, { data: 'office' }, { data: 'extn' }, { data: 'start_date' }, { data: 'salary', render: DataTable.render.number(null, null, 0, '$') } ], layout: { topStart: { buttons: [ { extend: 'create', editor: editor }, { extend: 'edit', editor: editor }, { extend: 'remove', editor: editor } ] } }, select: true });

In addition to the above code, the following Javascript library files are loaded for use in this example:

    The HTML shown below is the raw HTML table element, before it has been enhanced by DataTables:

    This example uses a little bit of additional CSS beyond what is loaded from the library files (below), in order to correctly display the table. The additional CSS used is shown below:

    The following CSS library files are loaded for use in this example to provide the styling of the table:

      This table loads data by Ajax. The latest data that has been loaded is shown below. This data will update automatically as any additional data is loaded.

      The script used to perform the server-side interaction for this demo is shown below. This server uses PHP, so the PHP script is shown, however our download packages include the equivalent script for other platforms, including .NET and Node.js. Server-side scripts can be written in any language, using the protocol described in the Editor documentation.

      Other examples