API RESTful en Go

A continuación podemos ver una simple Api RESTful en Go.

Esto es una continuación del post: API RESTful

A nivel de archivos encontramos los siguientes

  • main.go -> este posee la definición de las rutas y la inicilización del servidor
  • endpoitns/personas.go -> en este se encuentran cada uno de las operaciones sobre personas, asi como un mapeo de datos de ejemplos

Archivo: main.go

En la función main se tienen 3 bloques bien definidos en la funcion main(), con la cual inicia la aplicación

  1. Creamos el elemento router que será el encargado de recibir las peticiones y redireccionar a la función que corresponda. Para esto usamos el paquete Gorilla/mux
  2. Agregamos a cada router el hander a utilizar en el cual se indica
    1. La ruta por ejemplo /persona
    2. La función a ejecutar cuando solicitemos esa ruta
    3. El método que aceptamos para esa ruta
  3. Finalmente inicializamos el servidor

A continuación veremos unos ejemplos de Rutas

En esta primera definimos a que función se debe invocar cuando queremos hacer un GET a la ruta /personas

router.HandleFunc("/personas", endpoint.GetPersonas).Methods("GET")

Esta es igual a la anterior, solo que le indicamos que lo que llega luego de /persona debe llamarse ID y debe esta compuesto por números

router.HandleFunc("/personas/{ID:[0-9]+}", endpoint.GetPersonaById).Methods("GET")
Archivo: endpoints/personas.go

En este archivo tenemos las funciones definidas para cada una de las rutas

1.- Listar todos los datos

func GetPersonas(w http.ResponseWriter, r *http.Request) {
  //Codifico el map en json
  salidaJson, _ := json.Marshal(Sample)
  //Inidico que los datos devueltos van en json
  w.Header().Set("Content-Type", "application/json")
  w.Write(salidaJson)
}

Cada función definida como handler debe tener los parámetros

  • http.ResponseWriter: Este es utilizado para responder al cliente que consume el endpoint
  • http.Request: Por medio de este obtenernos los datos enviados

1.- Retornar los datos solicitados

func GetPersonaById(w http.ResponseWriter, r *http.Request) {
  //Obtengo las variables definidas en la ruta
  vars := mux.Vars(r)
  //Verifico si existe y retorno el valor en json o doy un error NotFound
  if _, ok := Sample[vars["ID"]]; ok {
    //Codifico el registro en json
    salidaJson, _ := json.Marshal(Sample[vars["ID"]])
    //Inidico que los datos devueltos van en json
    w.Header().Set("Content-Type", "application/json")
    w.Write(salidaJson)
  } else {
    http.Error(w, "StatusNotFound", http.StatusNotFound)
  }
}

Con la linea de código mux.Vars(r) obtenemos todos los parámetros definidos en la ruta por lo cual podemos obtener el id indicado en /personas/3

En el siguiente repositorio de GitHub se tienen la APIRest completa <link>, el resto del código es fácil de interpretar por eso no lo escribo todo acá, puesto que es para que sea como una referencia mínima al como codificar la API

59 Comments

  1. Pingback: API RESTful – Otro Del Montón

  2. Pingback: sildenafil nz buy

  3. Pingback: average cost sildenafil 20mg

  4. Pingback: sildenafil generic india

  5. Pingback: asda pharmacy ventolin

  6. Pingback: brand cialis for sale

  7. Pingback: cialis uk supplier

  8. Pingback: how to buy viagra

  9. Pingback: tadalafil 5 mg goodrx

  10. Pingback: genuine viagra online

  11. Pingback: alldaychemist tadalafil

  12. Pingback: viagra medicine online

  13. Pingback: custom essays cheap

  14. Pingback: essays about community service

  15. Pingback: what is a good essay writing service

  16. Pingback: professional college application essay writers

  17. Pingback: cheap essay papers

  18. Pingback: essay on helping poor people

  19. Pingback: tadalafil price at walmart

  20. Pingback: viagra generic europe

  21. Pingback: female viagra pills

  22. Pingback: tadalafil best price 20 mg

  23. Pingback: glucophage china

  24. Pingback: furosemide kaliumsparend

  25. Pingback: zdravilo rybelsus

  26. Pingback: how fast does cephalexin work for uti

  27. Pingback: spiraldynamics

  28. Pingback: porn

  29. Pingback: child porn

  30. Pingback: porn

  31. Pingback: Spiral Dynamics

  32. Pingback: vxi.su

  33. Pingback: porno izle

  34. Pingback: augmentin for bronchitis

  35. Pingback: allopurinol (zyloprim)

  36. Pingback: site

  37. Pingback: side effects of augmentin 875 mg

  38. Pingback: celecoxib contraindications ati

  39. Pingback: celebrex for fibromyalgia

  40. Pingback: porn

  41. Pingback: amitriptyline for cats urination

  42. Pingback: is robaxin a muscle relaxer

  43. Pingback: what is the alternative to voltaren

  44. Pingback: grandpashabet

  45. Pingback: child porn

  46. Pingback: child porn

  47. Pingback: child porn

  48. Pingback: sex historie

  49. Pingback: ivermectin human

  50. Pingback: animal porn

  51. Pingback: ananın amı

  52. Pingback: child porn

  53. Pingback: child porn

  54. Pingback: lyrica generic

  55. Pingback: porn

  56. Pingback: Cocuk pornosu

  57. Pingback: child porn

  58. Pingback: child porn

  59. Pingback: porn

Comments are closed.