Web Service com Harbour em menos de 50 linhas

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

Web Service com Harbour em menos de 50 linhas

Mensagem por angeiras »

Olá,

Usando apenas o mod_harbour, podemos criar um web service com requisição HTTP GET de forma muito simples. Sem outras libs, frameworks, classes, etc. Só o mod_harbour já nos dá essa possibilidade.

Código: Selecionar todos

function main()
   local hGet   := {=>} ,;
         hRet   := {=>} ,;
         cPath  := AP_GetEnv("DOCUMENT_ROOT")+"/api1/" ,;
         cAlias := ""
   //
   // Setar o content-type para o tipo correto
   //
   AP_SetContentType( "application/json" )

   //
   // Testar se o método usado foi o GET
   //
   if AP_Method() == "GET"
      //
      // O retorno de AP_GetPairs() é um hash contendo todas as variáveis
      //
      hGet := AP_GetPairs()

      if HHasKey( hGet, "codbarra" ) .and. !empty(hGet["codbarra"])
         use (cPath + "produtos") shared new via "DBFCDX"
         set index to (cPath + "produtos.cdx")
         cAlias := alias()

         (cAlias)->(dbSetOrder( 1 ))
         if (cAlias)->(dbSeek( hGet["codbarra"] ))
            hRet['sucesso'] := .T.
            hRet['erro']    := ""
            hRet['descpro'] := alltrim((cAlias)->descricao)
         else
            hRet['sucesso'] := .F.
            hRet['erro']    := "Codigo de barra nao encontrado"
         endif
      else
         hRet['sucesso'] := .F.
         hRet['erro']    := "Falta informar o código de barras ou nome da variavel esta errado (deve ser 'codbarra')"
      endif

      ?? hb_jsonencode( hRet )
   else
      ?? "Requisição para esse exemplo dever ser GET"
   endif
RETURN NIL
Esse exemplo permite a pesquisa pelo EAN de um produto e retornar um JSON basicamente com a descrição do produto. Claro que ainda tem muita coisa pra fazer aqui: autenticação usando JWT, usar POST ao invés de GET pra informações mais complexas, etc.

Fiz um post em https://dev.to/neoangeiras/criando-uma- ... rbour-40lf com alguns detalhes a mais. A intenção é a criação de mais posts a medida que vou aprendendo/descobrindo mais a esse respeito.

[]s
M.Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
Responder