API Cliente em Shell Script

Pré requisitos

Para utilizar a API cliente em Shell Script é necessário alguns pacotes instalados no linux que estiver usando: curl, jq, python.

Se estiver usando distribuições baseadas em Debian: apt-get update; apt-get install curl jq python -y;

Se estiver usando distribuições baseadas em Red Hat: yum update; yum install curl jq python -y;

Começando

Primeiro passo é ter disponível seu token e a url do sistema. Caso não tenha ainda: Configurando acesso ao Webservice API.

Troque as variáveis "TOKEN" e "URL_SISTEMA" do script abaixo.

Código

  1 #!/bin/bash
  2 
  3 #token do usuario do sistema
  4 TOKEN="4:9aa1dfca5d6a58747f6ce820777a4ffe7f425e4056146fe5a506a199c363bfeb";
  5 #url do sistema
  6 URL_SISTEMA="https://10.65.0.209/webservice/v1";
  7 #SELFSIGNED usa certificado autoassinado 1 sim  0 nao
  8 SELFSIGNED=1;
  9 
 10 #### FUNCOES
 11 function ver_dependecias(){
 12 	#verificar dependencias curl, jq, python
 13         ecurl=$(curl -V | wc -l);
 14         if [ $ecurl  -lt 1 ]; then
 15 		echo "curl não está instalado";
 16         fi
 17         ejq=$(jq --version | wc -l);
 18         if [ $ejq  -lt 1 ]; then
 19                 echo "jq não está instalado";
 20         fi
 21 }
 22 function ver_config(){
 23 	#ler token do arquivo config
 24 	valida=$(echo  $TOKEN | egrep '^(([0-9]{1,3})(:)([a-z0-9]*))$' | wc -l );
 25 	if [ $valida -ne 1 ]; then
 26 		echo "Token não está no formato correto";
 27 		exit;
 28 	else
 29 		#passar token para base64
 30 		TOKEN=$(echo -n $TOKEN | base64 | tr -d [:space:] );
 31 	fi
 32 	#saber se e auto assinado
 33 	if [ $SELFSIGNED -eq 1 ];then
 34 		ACEITA_SS=" -k ";
 35 	else
 36 		ACEITA_SS="";
 37 	fi
 38 	#comando curl que sera executado
 39 	CURL_EXEC="curl -s $ACEITA_SS -H 'Authorization:Basic $TOKEN' -H 'Content-Type: application/json' -X ";
 40 }
 41 function validar_parametros(){
 42 	#valida se impressao tem valor
 43         if [ ! -n "$IMPRIMIR" ]; then
 44 		IMPRIMIR="y";
 45 	fi
 46         #valida se parametro e json
 47 	if [ -n "$PARAMETROS" ]; then
 48         	ejson=$(echo -n "$PARAMETROS" | python -m json.tool | wc -l);
 49         	if [ $ejson -eq 0 ] ; then
 50         		echo "O parametro passado em -p  precisa ser no formato json";
 51         	        echo "Exemplo '{\"teste\":\"teste\",\"teste2\":\"teste2\"}'";
 52         	        exit;
 53         	fi
 54 	fi
 55         #valida se registro e inteiro
 56         einteiro=$(echo  $REGISTROID | wc -l);
 57         if [ $einteiro -ge 1 ]; then
 58                 einteiro=$(echo $REGISTROID | egrep '^([0-9,]*)$' | wc -l);
 59                 if [ $einteiro -eq 0 ] ; then
 60                         echo "O parametro passado em -r  precisa ser um inteiro";
 61                         echo "Exemplo '-r 10'";
 62                         exit;
 63                 fi
 64         else
 65                 REGISTROID="";
 66         fi
 67         #valida se formulario e string
 68 	if [ -z $FORMULARIO ]; then
 69 		echo "O parâmetro -f é obrigatório, use -f nomedoformulario";
 70 		exit;
 71 	else
 72         	estring=$(echo $FORMULARIO | egrep '^([a-z_]*)$' | wc -l);
 73         	if [ $estring -ne 1 ] ; then
 74         	        echo "O nome da formulário pode conter somente letras minúsculas";
 75         	        exit;
 76 		fi
 77 	fi
 78 }
 79 
 80 function tomar_acao(){
 81 	#verifica se os parametros necessarios para acao foram passados, e toma a acao
 82         case $ACAO in
 83 		#post = enviar, precisa dos parametros no formato json
 84                 "POST")
 85 			if [ -z "$PARAMETROS" ]; then
 86 				echo "A opção -p é obrigatória para o método POST, use -p '{\"use\":\"json\"}'";
 87 			else
 88 				 inserir
 89 			fi
 90                 ;;
 91 		#get = buscar, se nao tem parametros ele busca o padrao
 92                 "GET")
 93 			listar
 94                 ;;
 95 		#delete = deletar, precisa do id para deletar
 96                 "DELETE")
 97                 	if [ -z $REGISTROID ]; then
 98 				echo "A opção -r é obrigatória para o método DELETE, exemplo -r 100 ou -r 100,101 ";
 99 			else
100 				deletar
101                         fi
102                 ;;
103 		#put =  editar, precisa de parametros e do id.
104                 "PUT")
105 			if [ -z "$PARAMETROS" ]; then
106                                 echo "A opção -p é obrigatória para o método PUT, exemplo -p '{\"use\":\"json\"}' ";
107                         else
108                                 if [ -z $REGISTROID ]; then
109                                         echo "A opção -r é obrigatória para o método PUT, exemplo -r 100 ou -r 100,101 ";
110                                 else
111 					editar
112 				fi
113                         fi
114                 ;;
115 		#nenhuma acao e tomada
116                 *)
117                         echo "Nenhuma ação valida, use: -a [ 'POST' para inserir, 'GET' para listar, 'DELETE' para deletar, 'PUT' para editar]";
118                 ;;
119         esac
120 }
121 
122 function editar(){
123 	#buscar id do formulario
124         METODO_TEMP=" POST -H 'ixcsoft:listar' ";
125 	PARAMETROS_TEMP="{\"qtype\":\"$FORMULARIO.id\",\"query\":\"$REGISTROID\",\"oper\":\"=\"}";
126         CURL_EXEC_TEMP="$CURL_EXEC $METODO_TEMP -d '$PARAMETROS_TEMP' $URL_SISTEMA/$FORMULARIO";
127         RESPOSTA_TEMP=$(echo -n $CURL_EXEC_TEMP | sh | jq '.registros[0]');
128 	#editar os campos
129 	CAMPOSEDIT=$(echo $PARAMETROS | tr -d '[:space:]' | sed 's/{"/./g' | sed 's/,"/ | ./g' | sed 's/":/:/g' | sed 's/:/=/g' | sed 's/}//g');
130 	PARAMETROS=$(echo $RESPOSTA_TEMP | jq  "$CAMPOSEDIT" );
131 	#gravar a edicao
132 	METODO=" PUT ";
133 	CURL_EXEC="$CURL_EXEC $METODO -d '$PARAMETROS' $URL_SISTEMA/$FORMULARIO/$REGISTROID";
134 	RESPOSTA=$(echo -n $CURL_EXEC | sh );
135         imprimir
136 }
137 
138 function listar(){
139 	#o método get e um post que usa um cabecalho especial, por questoes de seguranca
140 	METODO=" POST -H 'ixcsoft:listar' ";
141 	CURL_EXEC="$CURL_EXEC $METODO -d '$PARAMETROS' $URL_SISTEMA/$FORMULARIO";
142 	
143 	RESPOSTA=$(echo -n $CURL_EXEC | sh );
144 	imprimir
145 }
146 function deletar(){
147 	METODO=" DELETE ";
148 	CURL_EXEC="$CURL_EXEC $METODO $URL_SISTEMA/$FORMULARIO/$REGISTROID";
149 	RESPOSTA=$(echo -n $CURL_EXEC | sh );
150 	imprimir
151 }
152 function inserir(){
153 	METODO=" POST ";
154 	CURL_EXEC="$CURL_EXEC $METODO -d '$PARAMETROS' $URL_SISTEMA/$FORMULARIO";
155 	RESPOSTA=$(echo -n $CURL_EXEC | sh );
156 	imprimir
157 }
158 function imprimir(){
159 	case "$IMPRIMIR" in
160 		"n")
161 			echo $RESPOSTA > /dev/null;
162 		;;
163 		"y")
164 			echo $RESPOSTA
165 		;;
166 		"jq")
167 			echo $RESPOSTA | jq
168 		;;
169 		*)
170 			echo $RESPOSTA
171 		;;
172 	esac
173 }
174 #####MAIN
175 ver_dependecias
176 ver_config
177 	if [ "$1" == "--help" ];then
178 		echo "";
179 		echo "	API CLIENT em Shell Script para integração com IXCSoft.";
180 		echo "	Os pré-requisitos para este script são python, curl e jq";
181 		echo "	Documentação da API: https://www.ixcsoft.com.br/wiki_api/provedor/"
182 		echo "	Abra este script no editor de texto de preferencia e altere as constantes TOKEN e URL_SISTEMA, de acordo com o sistema";
183 		echo "	O certificado digital é obrigatório (https). Caso o certificado seja auto assinado";
184 		echo "		 altere a constante SELFSIGNED=1 , caso use seja normal SELFSIGNED=0";
185 		echo "";
186 		echo "	use as opções : ";
187 		echo "";
188 		echo "	-i ['y' ou 'n' ou 'jq'] para escolher a forma de imprimir. Essa opção não é obrigatória, e o padrão é y."
189 		echo "		y = imprime em texto sem quebra de linha";
190 		echo "		n = não imprime nada";
191 		echo "		jq = usa jq para imprimir com cores e quebras de linha";
192 		echo "";
193 		echo "	-a ['POST' ou 'GET' ou 'DELETE' ou 'PUT'] para escolher o método que a api usará, dependendo da requisição. Este parâmetro é obrigatório";
194                 echo "          POST = insere dados, é obrigatório usar -f e -p em conjunto";
195                 echo "          GET = busca dados, é obrigatório usar -f em conjunto (Este método se chama get, mas a requisição usa post com um cabeçario especial)";
196                 echo "          DELETE = deleta dados,  é obrigatório usar -f e -r em conjunto";
197 		echo "          PUT = edita dodos,  é obrigatório usar -f , -p e  -r em conjunto";
198 		echo "";
199 		echo "	-f [nomedoformulario] para escolher sobre qual formulário a api estará trabalhando. Este parâmetro é obrigatório";
200 		echo "		consulte a documentação da api para ver quais formulários podem ser usados";
201 		echo "";
202 		echo "	-r [inteiro] para escolher sobre qual registro será aplicado, a edição ou o delete. Obrigatório apenas quando -a for DELETE ou PUT";
203 		echo "		Será necessário saber o id da trupla no formulário. Pode se obter usando o método GET";
204 		echo "";
205 		echo "	-p [ '{\"use\":\"json\"}' ] para passar pârametros de data(dados) no formato json . Obrigatório apenas quando -a for POST ou PUT. Opcional quando -a for GET";
206 		echo "		o formato json precisa ser válido exemplo:{\"chave\":\"valor\",\"chave\":\"valor\"}";
207 		echo "		para saber quais chaves e valores possíveis consulte a documentação da API";
208 		echo "";
209 		echo "";
210 		echo "	Abraço, Alex";
211 		echo "";
212                 echo "";
213 		exit;
214 	fi
215 	while getopts "a:f:p:r:i:" OPT; do
216                case "$OPT" in
217                         "a")
218                                 ACAO=${OPTARG};
219                         ;;
220                         "f")
221                                 FORMULARIO=${OPTARG};
222                         ;;
223                         "p")
224                                 PARAMETROS=${OPTARG};
225                         ;;
226 			"r")
227                                 REGISTROID=${OPTARG};
228                         ;;
229 			"i")
230                                 IMPRIMIR=${OPTARG};
231                         ;;
232                         *)
233                                 echo "Parâmetro inválido $OPT";
234                         ;;
235                 esac
236         done
237 validar_parametros
238 tomar_acao

Exemplos de uso

Criando o arquivo shell

Você pode usar qualquer editor de texto para criar o arquivo de script, aqui usei o nano. De permissão de execução no script.

Criando api shell script.png

Exemplo de listar

Um exemplo listar todos os clientes que estão cadastradas no IXCSoft.

Exemlo api shell listando cliente.png

Exemplo de criar

Adicionar cliente Alex, preenchendo os campos obrigatórios.

Exemplo criar novo cliente api shell.png

Exemplo de editar

Um exemplo de editar o cliente de id número 3, alterando a razão para "teste - Alex". Repare que os parâmetros precisam ser json. Toda vez que usar esse método, por padrão é necessário executar o GET no cliente e pegar os dados dele, e executar o PUT para atualizar.

Exemplo editar cliente api shell .png

Exemplo de deletar

Deleta o cliente de id número 3.

Exemplo de deletar clientes api shell.png

Ajuda, descrição dos parâmetros.

API CLIENT em Shell Script para integração com IXCSoft.

Os pré-requisitos para este script são python, curl e jq

Documentação da API: https://www.ixcsoft.com.br/wiki_api/provedor/

Abra este script no editor de texto de preferencia e altere as constantes TOKEN e URL_SISTEMA, de acordo com o sistema

O certificado digital é obrigatório (https). Caso o certificado seja auto assinado

altere a constante SELFSIGNED=1 , caso use seja normal SELFSIGNED=0

use as opções : 

-i ['y' ou 'n' ou 'jq'] para escolher a forma de imprimir. Essa opção não é obrigatória, e o padrão é y.

y = imprime em texto sem quebra de linha;

n = não imprime nada;

jq = usa jq para imprimir com cores e quebras de linha;

-a ['POST' ou 'GET' ou 'DELETE' ou 'PUT'] para escolher o método que a api usará, dependendo da requisição. Este parâmetro é obrigatório;

          POST = insere dados, é obrigatório usar -f e -p em conjunto;

          GET = busca dados, é obrigatório usar -f em conjunto (Este método se chama get, mas a requisição usa post com um cabeçario especial);

          DELETE = deleta dados,  é obrigatório usar -f e -r em conjunto;

          PUT = edita dodos,  é obrigatório usar -f , -p e  -r em conjunto;

-f [nomedoformulario] para escolher sobre qual formulário a api estará trabalhando. Este parâmetro é obrigatório

consulte a documentação da api para ver quais formulários podem ser usados;

-r [inteiro] para escolher sobre qual registro será aplicado, a edição ou o delete. Obrigatório apenas quando -a for DELETE ou PUT

Será necessário saber o id da trupla no formulário. Pode se obter usando o método GET;

-p [ '{"use":"json"}' ] para passar pârametros de data(dados) no formato json . Obrigatório apenas quando -a for POST ou PUT. Opcional quando -a for GET

o formato json precisa ser válido exemplo:{"chave":"valor","chave":"valor"};

para saber quais chaves e valores possíveis consulte a documentação da API.

-

Voltar para Página principal