Como criar uma API RESTful com o Joomla

11

Estou construindo extensões Joomla desde a v1, mas logo preciso fazer uma API ao vivo que construí e uso há algum tempo. Atualmente, estou usando o Joomla 2.5 e escrevi plugins para este sistema:

https://github.com/techjoomla/com_api

Antes de ir ao ar, eu gostaria de testar o sistema o máximo possível. Esse componente da API apenas recentemente começou a ser atualizado para funcionar com o Joomla v3, portanto, atualmente está impedindo a atualização do site. Também acho que separar a API pública e o portal do usuário faz sentido, pois não há benefício em ser uma extensão integrada, pois a API será usada por aplicativos móveis.

O plano atual é reconstruir a API em um subdomínio, o que nos permitirá atualizar o portal do usuário. Eu tenho lido sobre o novo framework Joomla, que parece emocionante. Isso seria adequado para criar uma API RESTful para nossos aplicativos móveis? Em caso afirmativo, são dicas sobre como começar? Eu li que o FoF pode ser usado para criar uma API, isso seria uma boa escolha? Vi o projeto Kickstarter com a intenção de criar exatamente esse tipo de API. Essa é uma opção em potencial? Devo apenas retirar o site 2.5 atual do subdomínio para que ele execute apenas a API?

Todas as sugestões sobre a melhor abordagem para a criação de uma API RESTful baseada em Joomla para interação móvel serão muito apreciadas.

Joe P
fonte
1
Eu vi este novo extensões no diretório de extensões Joomla que pode vir a calhar para você: extensions.joomla.org/extensions/core-enhancements/libraries/...
Lodder

Respostas:

8

Da minha experiência:

Sobre o framework Joomla

Tentei criar uma API RESTful simples para autenticação integrada com base no framework Joomla. É bastante complexo, bem diferente da API atual do Joomla. Além disso, o código-fonte atual não pode ser colado e as bibliotecas podem retornar resultados inesperados (sendo executados em um ambiente diferente). Vou esperar até que mais código esteja disponível e tenha uma maior adoção.

Sobre a estrutura FOF

Atualmente, estou desenvolvendo apenas com FOF. Bastante útil, muita RAD, configuração automática, etc; e o código é compatível com J2.5 / J3.

Para uma API RESTful, você pode simplesmente pegar o exemplo todo-fof e adicionar um controlador à API. Exemplo:

public function getIndexStatus()
{
    // CSRF prevention
    if ($this->csrfProtection)
    {
        $this->_csrfProtection();
    }

    $message['status'] = true;
    $message['error_message'] = 'Status Ok';

    $message = json_encode($message);
    echo $message;
    flush();

    JFactory::getApplication()->close();

}

Além disso, você pode tirar proveito das visualizações json automáticas. Por exemplo, uma visualização de navegação (default.php) pode gerar saída json (apenas adicionando default_json.phpe echo json_encode...)

Anibal
fonte
1
O único problema com o FOF, como eu o entendo, é que ele não é mais suportado pelo desenvolvedor no núcleo do Joomla ... embora eu entenda que uma versão do FOF foi redirecionada e está indo em frente, mas não como parte do Joomla?
Craig
Você está certo, mas não é um problema. O FOF do Joomla é bastante estável (ainda não atualizei minhas extensões). O novo F0F deve ser instalado como uma nova biblioteca (... no final, você sempre deve instalá-lo no J2.5 ... e o instalador está pronto para o J3). No momento, 99% do código fonte não foi alterado.
Anibal
Obrigado por suas sugestões, eu concordo que o Joomla Framework é bastante complexo, mas estou gostando de aprender a usá-lo. Queria tentar usar a estrutura da minha API, pois é bastante simples, mas não consigo retornar o cabeçalho correto para JSON. Comecei outra pergunta sobre isso.
Joe P
6

com_api é definitivamente uma boa maneira de criar serviços REST para o seu site se a extensão em si não for baseada em FOF / RAD. No entanto, tenha cuidado com algumas dicas, se você planeja criar uma instância separada do Joomla apenas para a API

  • Itens específicos do domínio (por exemplo: se você estiver apoiando o registro do usuário, o email de boas-vindas incluirá um link para o subdomínio da API). Isso pode ser atenuado brincando com a variável de servidor PHP.
  • Da mesma forma, os caminhos de imagem etc. precisam estar corretos, a menos que você esteja usando o S3

Além disso, tenho certeza de que não deve haver problemas, pois isso continuará sendo desenvolvido até que exista uma maneira de criar APIs do Joomla.

Disclaimer: Eu sou o mantenedor de https://github.com/techjoomla/com_api

Ashwin Date
fonte
Obrigado pela sua resposta, é ótimo saber que você continua desenvolvendo-a. Eu amo como o com_api funciona, mas eu queria tentar evitar executar o Joomla CMS inteiro apenas para fornecer uma API. Se não conseguir que a estrutura funcione conforme necessário, definitivamente continuarei a usá-la.
Joe P
1

Meus dois centavos:

Para um cliente, eu precisava acessar o conteúdo do site joomla a partir de um aplicativo para smartphone. O conteúdo foi colocado em com_content, então inicialmente usei feeds obRSS. Então eu encontrei o jBackend no JED e tentei. Está disponível aqui http://www.selfget.com/products/jbackend.html O código parece muito limpo e suporta solicitações RESTful e respostas JSON. A documentação online é limitada, mas suficientemente clara para os técnicos. Infelizmente, no momento, ele suporta apenas com_user e com_content, mas no meu caso, isso estava bem. Agora devo usá-lo para outro cliente que usa o K2 CCK. Estou tentando criar um plug-in personalizado para acessar artigos e categorias do K2, mas pelo menos salvarei o código de gerenciamento de solicitações inteiro. Enviei um email para o desenvolvedor e ele me disse que também está trabalhando em módulos adicionais como o fórum K2 e Kunena, é uma extensão muito promissora.

WizKid
fonte
1

O site a seguir parece ser um excelente recurso para diretrizes sobre como criar uma API JSON RESTful:

http://jsonapi.org/

Para o que vale a pena, também estou lançando um produto API para o Joomla 3.4.x chamado cAPI http://getcapi.org .

O principal diferencial aqui é que eu apostou minha estrutura de roteamento na micro-estrutura Slim. Isso me permite incorporar uma estrutura robusta já testada e testada na instância do aplicativo Joomla. Também criei uma arquitetura de plug-in para as rotas de serviço, abrindo a porta para complementos e segurança de serviços da web.

Você pode encontrar informações adicionais de outras postagens aqui:

/programming/26340885/rest-api-for-joomla-3-0/32706378#32706378

Deixe-me saber se você tiver alguma dúvida.

Steve Tsiopanos
fonte