Documente Academic
Documente Profesional
Documente Cultură
Main Page
Go Buscar
Personal
español
Acceder
Page
Página
Discusión
Ver código
Historial
Tools
Información de la página
Enlace permanente
Versión para imprimir
Páginas especiales
Cambios relacionados
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 1 de 14
Wispro REST API - Wispro 21/3/18 09)49
Página principal
Cambios recientes
Página aleatoria
Ayuda
Contenido
1 Wispro REST API
2 Creación del Token
3 Uso del Token
4 Uso de la API
4.1 Crear un cliente
4.2 Editar un cliente
4.3 Mostrar un cliente
4.4 Listar todos los clientes
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 2 de 14
Wispro REST API - Wispro 21/3/18 09)49
Esta API permite hacer operaciones CRUD sobre los modelos clientes, contratos y planes. También permite hacer búsquedas filtrando
por distintos atributos.
Para poder acceder a la API hay que crear un usuario en el servidor Wispro con la opción de API habilitada y generarle una clave o
token de acceso.
Una vez teniendo el API Token, se puede acceder a los recursos expuestos por la API.
Allí recomendamos crear un nuevo usuario para usarlo exclusivamente con la API. Todas las operaciones que este usuario realice en el
sistema dejarán su registro en las auditoarías del sistema.
Completamos los campos requeridos como nombre, e-mail, contraseña, y luego habilitamos el acceso API con 3 simples pasos
2. Hacemos click en “Generar nuevo API token”, debemos ver que el campo parpadea en verde y un nuevo token es mostrado en el
campo correspondiente.
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 3 de 14
Wispro REST API - Wispro 21/3/18 09)49
El token puede regenerarse en cualquier momento, pero se debe recordar de actualizarlo también en la aplicación cliente. Es decir el
token es como una constraseña que no debe ser entregada a terceros y solo debe ser con el cliente API.
El formato es el siguiente:
Authorization: Token
token=acba205b14cf69a6e14b461d26c0ffce43d09dc782254dc9c091ef97b413710093da8eea28e880ab21b09c41ee949f03
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 4 de 14
Wispro REST API - Wispro 21/3/18 09)49
Cada request hecha con el token será autenticada con el usuario correspondiente, dando así acceso a los recursos.
Se puede probar el acceso con token via curl, por ejemplo para obtener el listado de clientes::
Uso de la API
Para usar la API basta con hacer consultas usando un cliente HTTP. La elección del cliente va a depender de que lenguaje de
programación estemos utilizando en la aplicación que va a interactuar con Wispro y de las necesidades particulares del proyecto. A
continuación ponemos algunos ejemplos de lenguajes y librerías que se pueden usar como clientes REST HTTP para acceder a la API:
Ruby
RestClient (https://github.com/rest-client/rest-client)
PHP
HTTPFul (http://phphttpclient.com/)
PHP REST Client (https://github.com/tcdent/php-restclient)
Python
Requests (http://docs.python-requests.org/en/master/)
REST Client (https://pypi.python.org/pypi/rest-client)
BASH / ZSH
CURL (https://curl.haxx.se/)
Las consultas (requests) HTTP siguen el patrón REST y se corresponden con los verbos de HTTP de la siguiente manera.
Verbo
Acción CRUD Descripción
HTTP
Crear
POST Se usa para crear un nuevo registro, por ejemplo un nuevo cliente, contrato o plan.
(Create)
Leer Permite leer un registro o una colección. Es decir por ejemplo un contrato en particular, o
GET
(Read) listar todos los contratos disponibles..
Actualizar Se usa para actualizar un registro que ya existe, por ejemplo para actualizar un número
PUT
(Update/Replace) de telefono de un cliente o para cambiar de plan un contrato.
Eliminar
DELETE Elimina un registro.
(Delete)
Crear un cliente
Veamos un ejemplo concreto mirando la referencia de REST del modelo Clients (http://doc.wispro.co/index.php?
title=Wispro_REST_API#REST_Clientes) de wispro.
En ella podemos ver que para crear un registro ( :action=> “create” ) debemos usar el método POST, usando la URL /api/clients.
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 5 de 14
Wispro REST API - Wispro 21/3/18 09)49
Ahora vamos a crear un cliente usando esta información desde un cliente HTTP de línea de comandos como es curl.
Primero vamos a configurar unas variables de entorno para que no tengamos que tipear tanto cada vez que invoquemos a curl, y luego
llamaremos a la API. Cabe mencionar que la API utiliza el formato JSON en la DATA de las request como las responses.
# hacemos un alias de curl, para que cada vez que lo invoquemos tengamos seteados los HEADERS de auth y content-type
alias curl=’curl -k -H "Authorization: Token token=$auth" -H “Content-Type: application/json”’
Si ejecutamos estas líneas, entonces y obtenemos como respuesta HTTP un 200OK, entonces habremos creado un nuevo cliente con
nombre “Ernesto Guevara”. Es de notar, como el parámetro name (nombre), está anidado dentro de otro parámetro llamado client. Si por
ejemplo quisiéramos dar de alta el cliente junto con un número de teléfono, entonces la línea anterior sería
En este caso damos de alta el cliente asignándole un nombre y un número de teléfono. Esta llamada a la API nos va a devolver en caso de
éxito el ID asignado al nuevo cliente. Este dato puede ser útil para luego hacer una modificación sobre el mismo. Para capturar ese ID
desde la línea de comandos podemos usar un progama llamado jq, que lo que hace es parsear una salida en JSON y mostrarla en forma
humana, o incluso parsearla para obtener un parámetro en particular como haremos en este caso.
En este caso la variable client_id ahora contendrá el ID del cliente que acabamos de crear.
Editar un cliente
Supongamos que ahora quiero cambiar(actualizar) el nombre del cliente, de nuevo busco en la referencia REST de Clientes y encuentro
Esto significa que para actualizar(update) un registro debo usar el verbo PUT, usando la URL /api/clients/:id, donde :id es el ID del
cliente que quiero modificar.
Mostrar un cliente
Para ver toda la información de un cliente en particular podemos usar el :action => “show”
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 6 de 14
Wispro REST API - Wispro 21/3/18 09)49
En este caso se puede también usar el pipe a jq para tener una salida más bonita (curl ... | jq -)
Buscar clientes
El action index, además de listar todos los clientes, permite buscar usando un parámetro especial llamado search.
Por ejemplo si quiero buscar todos los clientes que se llamen ernesto, puedo usar la API de la siguiente manera
Se pueden buscar coincidencias dentro de todos los campos del modelo usando distintos parámetros dinámicos, en este caso por ejemplo
usamos el campo name, y le agregamos la palabra _like, que termina usando el LIKE de SQL. Se pueden usar otros modificadores como
_equal, _greather_than y muchos más.
Para una referencia más completa de cómo usar la búsqueda ver https://github.com/binarylogic/searchlogic#search-using-conditions-
on-columns
Eliminar un cliente
Por último, si queremos borrar un registro tenemos que usar el :action => “destroy”
Con curl
Aplicar Cambios
La API también permite aplicar cambios, de la misma forma que se aplican cambios usando el botón homónimo en la interfaz web de
Wispro.
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 7 de 14
Wispro REST API - Wispro 21/3/18 09)49
Cuando la API devuelve 200 OK significa que se activa el proceso de aplicar cambios, el cual puede tardar unos segundos a unos minutos
en ejecutarse dependiendo de la cantidad de clientes y contratos presentes en el servidor de destino.
Appendix
REST Clientes
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 8 de 14
Wispro REST API - Wispro 21/3/18 09)49
Validations
validates_presence_of :name
REST Contratos
GET /api/contracts(.:format) {:action=>"index", :controller=>"api/contracts"}
POST /api/contracts(.:format) {:action=>"create", :controller=>"api/contracts"}
GET /api/contracts/new(.:format) {:action=>"new", :controller=>"api/contracts"}
GET /api/contracts/:id/edit(.:format) {:action=>"edit", :controller=>"api/contracts"}
GET /api/contracts/:id(.:format) {:action=>"show", :controller=>"api/contracts"}
PUT /api/contracts/:id(.:format) {:action=>"update", :controller=>"api/contracts"}
DELETE /api/contracts/:id(.:format) {:action=>"destroy", :controller=>"api/contracts"}
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 9 de 14
Wispro REST API - Wispro 21/3/18 09)49
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 10 de 14
Wispro REST API - Wispro 21/3/18 09)49
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 11 de 14
Wispro REST API - Wispro 21/3/18 09)49
Validations
validates_presence_of :ip, :ceil_dfl_percent, :client, :plan
validates_presence_of :proxy_arp_interface, :if => Proc.new { |c| c.proxy_arp }
validates_presence_of :proxy_arp_lan_gateway, :if => Proc.new { |c| c.proxy_arp_use_lan_gateway }
validates_format_of :tcp_prio_ports, :udp_prio_ports, :prio_protos, :prio_helpers, :with => /^([0-9a-z-]+(:[0-9]+)*,)*[0-9a-z-]+(:[0-
9]+)*$/, :allow_blank => true
validates_format_of :mac_address, :with => /^([0-9A-Fa-f]{2}\:){5}[0-9A-Fa-f]{2}$/, :allow_blank => true
validates_numericality_of :ceil_dfl_percent, :only_integer => true, :greater_than => 0, :less_than_or_equal_to => 100
validates_uniqueness_of :ip, :allow_nil => true, :allow_blank => true
validates_uniqueness_of :mac_address, :allow_nil => true, :allow_blank => true
validate :state_should_be_included_in_the_list
validate :uniqueness_mac_address_in_interfaces_lan
validate :ip_without_netmask, :if => "ip_changed?"
validate :check_invalid_options, :if => Proc.new {|c| not c.netmask.nil? and not c.ip_is_single_host? }
validate_ip_format_of :ip, :with_netmask => true
validate_ip_format_of :proxy_arp_gateway, :with_netmask => false
validate_ip_format_of :proxy_arp_lan_gateway, :with_netmask => false
REST Planes
GET /api/plans(.:format) {:action=>"index", :controller=>"api/plans"}
POST /api/plans(.:format) {:action=>"create", :controller=>"api/plans"}
GET /api/plans/new(.:format) {:action=>"new", :controller=>"api/plans"}
GET /api/plans/:id/edit(.:format) {:action=>"edit", :controller=>"api/plans"}
GET /api/plans/:id(.:format) {:action=>"show", :controller=>"api/plans"}
PUT /api/plans/:id(.:format) {:action=>"update", :controller=>"api/plans"}
DELETE /api/plans/:id(.:format) {:action=>"destroy", :controller=>"api/plans"}
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 12 de 14
Wispro REST API - Wispro 21/3/18 09)49
decimal (20,
traffic_accounting_data YES 0
0)
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 13 de 14
Wispro REST API - Wispro 21/3/18 09)49
Validations
validates_uniqueness_of :name
validates_presence_of :name, :provider_group, :ceil_down, :ceil_up
validates_presence_of :cir_reuse, :if => lambda { |p| p.cir_strategy == CIR_STRATEGY_REUSE }
validates_presence_of :cir, :if => lambda { |p| p.cir_strategy == CIR_STRATEGY_PERCENTAGE }
validates_presence_of :total_cir_down, :total_cir_up, :if => lambda { |p| p.cir_strategy == CIR_STRATEGY_PLAN_TOTAL }
validates_length_of :name, :in => 3..128
validates_numericality_of :ceil_down, :ceil_up, :only_integer => true, :allow_nil => true, :greater_than => 0
validates_numericality_of :long_download_max, :long_upload_max, :only_integer => true, :greater_than_or_equal_to => 0, :less_than
=> 4294967295
validates_numericality_of :cir, :greater_than => 0, :less_than_or_equal_to => 1, :allow_nil => true
Obtenido de «http://doc.wispro.co/index.php?title=Wispro_REST_API&oldid=5144»
http://doc.wispro.co/index.php?title=Wispro_REST_API#Listar_todos_los_clientes Página 14 de 14