Um protótipo do MySQL 5.7 está sendo lançado com um componente opcional chamado o MySQL HTTP Plugin. Esse plugin permite acesso direto ao MySQL via REST sobre HTTP, eliminando a necessidade de um servidor intermediário ou drivers específicos de banco de dados.
SQL sobre HTTP
Na verdade, existem três interfaces disponíveis através deste plugin. A primeira citada na documentação é o endpoint "SQL". O endpoint aceita e executa declarações SQL passadas através de uma URL. Por exemplo
SQL: SELECT * FROM simple ORDER BY id
URL: http://labs.mysql.com/">http://127.0.0.1:8080/sql//SELECT+%2A+FROM+simple+ORDER+BY+id
Os resultados voltam na forma de um documento JSON. Na seção "meta" é possível recuperar a informação sobre cada coluna no conjunto de resultados. Então temos uma seção de "data", que é um array de linhas. Cada linha está na forma de um array de campos. Para reduzir os custos de largura de banda e de análise, estes campos não são nomeados. Ao invés disso, é necessário deduzir o nome dos campos a partir da posição no array.
CRUD sobre HTTP
O endpoint "CRUD" é o que normalmente pensamos como REST. Para todas as operações, é necessário fornecer a chave primária na URL da requisição. Isso significa que não é possível confiar no AUTO_INCREMENT usado em chaves primárias quando inserindo novas linhas.
Com uma requisição PUT, que é usada para insert/update, é necessário fornecer um objeto JSON tradicional como o corpo da mensagem. Da mesma maneira ao usar o GET para ler um registro, recuperamos um objeto JSON tradicional sem nenhum metadado. Na teoria isso reduz o tamanho da mensagem, mas na prática provavelmente caberia em um único pacote TCP de qualquer maneira.
O padrão de URL é:
protocol://host:port/crud/database/table/primaryKey
Documento JSON sobre HTTP
As interfaces SQL e CRUD continuam baseadas em tabelas relacionais. Ou seja, existe um esquema bem definido de linhas e colunas. Se for preciso armazenamento não estruturado, a interface "JSON Document" é ideal.
Essa interface é baseada em simples tabelas chave-valor. Os dados JSON são salvos em uma coluna BLOB, eliminando a necessidade do mapeamento entre os tipos de dados JSON e MySQL. As tabelas, que são gerenciadas pelo MySQL, podem ser criadas enviando uma mensagem PUT para uma URL usando o padrão:
protocol://host:port/doc/database/table
Tabelas de documentos sempre usam um VARCHAR (36) para a coluna de chave. Isto permite o padrão de operações CRUD:
protocol://host:port/doc/database/table/key