Resty, es un cliente simple para consultar Apis http. Tiene muchas características :
- Todos los métodos http: GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, etc.
- Métodos simples y encadenables para configuraciones y solicitudes.
- El cuerpo de la solicitud puede ser una cadena, [] byte, estructura, mapa, segmento e io.Reader también detecta automáticamente el tipo de contenido
- Procesamiento sin búfer para io.Reader
- Se puede acceder a la instancia *http.Request nativa durante la ejecución del middleware y la solicitud a través de Request.RawRequest
- El cuerpo de la solicitud se puede leer varias veces a través de Request.RawRequest.GetBody()
- Acceso como matriz de []bytes - respuesta.Cuerpo() O Acceso como cadena - respuesta.Cadena()
- Clasificación y desclasificación automáticas para el tipo de contenido JSON y XML
- El valor predeterminado es JSON, si proporciona estructura/mapa sin encabezado Content-Type
- Compatible con RFC7807:
application/problem+json
&application/problem+xml
- Resty proporciona una opción para anular JSON Marshal/Unmarshal y XML Marshal/Unmarshal
- Fácil de cargar uno o más archivos a través de multipart/form-data
- Detecta automáticamente el tipo de contenido del archivo
- Solicitud de parámetros de ruta de URL (también conocidos como parámetros de URI)
- Mecanismo de reintento de retroceso con referencia de función de condición de reintento
- Middleware de solicitud y respuesta HTTP y REST del cliente Resty
- Solicitud.SetContext compatible
- Opción de autorización de BasicAuth y Bearer token
- Establecer el valor de ContentLength de solicitud para todas las solicitudes o solicitudes en particular
- Certificados raíz personalizados y certificados de cliente
- Descargue/guarde la respuesta HTTP directamente en el archivo, como el indicador curl -o. Consulte SetOutputDirectory y SetOutput.
- Cookies para su solicitud y soporte de CookieJar
- Solicitud basada en registro SRV en lugar de URL de host
- Configuración del cliente como Tiempo de espera, RedirectPolicy, Proxy, TLSClientConfig, Transporte, etc.
- Opcionalmente, permite la solicitud GET con carga útil
- Admite el registro de la biblioteca JSON externa en Resty
- Expone el lector de respuestas sin leer la respuesta (sin desarme automático) si es necesario
- Opción para especificar el tipo de contenido esperado cuando falta el encabezado del tipo de contenido de respuesta.
- Admite la implementación de http.RoundTripper
- seguridad concurrente con goroutine
- Seguimiento podemos usar Client.EnableTrace y Request.EnableTrace
- Desde v2.4.0, la información de seguimiento contiene un valor de RequestAttempt y el objeto Request contiene un atributo de intento.
- Modo de depuración
- Funciona con HTTP/2 y HTTP/1.1
Y si ingresamos emanuelpeg por ejemplo obtendremos :
Ingrese el usuario de github :
emanuelpeg
Status Code: 200
Status : 200 OK
Proto : HTTP/2.0
Time : 365.365001ms
Received At: 2022-12-28 16:25:37.481908946 -0300 -03 m=+9.137266439
Body :
{"login":"emanuelpeg","id":1281319,"node_id":"MDQ6VXNlcjEyODEzMTk=","avatar_url":"https://avatars.githubusercontent.com/u/1281319?v=4","gravatar_id":"","url":"https://api.github.com/users/emanuelpeg","html_url":"https://github.com/emanuelpeg","followers_url":"https://api.github.com/users/emanuelpeg/followers","following_url":"https://api.github.com/users/emanuelpeg/following{/other_user}","gists_url":"https://api.github.com/users/emanuelpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/emanuelpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emanuelpeg/subscriptions","organizations_url":"https://api.github.com/users/emanuelpeg/orgs","repos_url":"https://api.github.com/users/emanuelpeg/repos","events_url":"https://api.github.com/users/emanuelpeg/events{/privacy}","received_events_url":"https://api.github.com/users/emanuelpeg/received_events","type":"User","site_admin":false,"name":"Emanuel","company":"assembly","blog":"http://emanuelpeg.blogspot.com/","location":"Crespo","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":51,"public_gists":19,"followers":15,"following":9,"created_at":"2011-12-23T03:12:26Z","updated_at":"2022-12-12T19:06:19Z"}
Request Trace Info:
DNSLookup : 33.874537ms
ConnTime : 165.492638ms
TCPConnTime : 48.333281ms
TLSHandshake : 83.032505ms
ServerTime : 199.757211ms
ResponseTime : 274.029µs
TotalTime : 365.365001ms
IsConnReused : false
IsConnWasIdle : false
ConnIdleTime : 0s
RequestAttempt: 1
RemoteAddr : 20.201.28.148:443
Process finished with the exit code 0