Hi,
I added a new convenience method to Zinc HTTP Components: ZnClient>>forJsonREST. This configures a ZnClient (HTTP client) to talk to standard JSON REST web services. Here are a couple of examples: ZnClient new forJsonREST; get: 'https://jsonplaceholder.typicode.com/users'. What #forJsonREST does is 3 things: set the 'Accept' header to 'application/json', install a #contentReader that parses incoming JSON as well as a #contentWriter that generates JSON. ZnClient new systemPolicy; forJsonREST; url: 'https://jsonplaceholder.typicode.com/posts'; contents: { #foo->1. #bar->2 } asDictionary; post. As you can see, the full ZnClient API can be combined when needed. ZnClient new forJsonREST; post: 'https://jsonplaceholder.typicode.com/posts' contents: (NeoJSONObject new foo: 1; bar: 2; yourself). #post:contents: combines separate #url: #contents: and #post message. #forJsonREST uses NeoJSON[Object|Writer] if found, else STONJSON. If both are missing, this results in an error. ZnClient new systemPolicy; forJsonREST; url: 'http://easy.t3-platform.net/rest/geo-ip'; queryAt: #address put: '81.83.7.35'; get. Finally, here is a more sophisticated example, doing a DNS request over HTTPS: ZnClient new systemPolicy; beOneShot; forJsonREST; accept: 'application/dns-json'; url: 'https://cloudflare-dns.com/dns-query'; queryAt: #name put: 'stfx.eu'; queryAt: #type put: #AAAA; get. Note that in most cases, you will configure one client to a specific endpoint and keep on reusing it. At one point in time it might be good to #close the client (although that happens on finalise as well). For single requests, you can use #beOneShot. All this can be found in #bleedingEdge (HEAD). There are unit tests as well. Sven |
You’re (one of) my heroes !
Thanks Sven a lot for all your great contributions ! Cédrick Side note: perfect late binding information for the lecture I do tomorrow with Pharo where I show students client server interaction with ZnClient, ZnServer … ^_^ > Le 7 nov. 2018 à 17:36, Sven Van Caekenberghe <[hidden email]> a écrit : > > Hi, > > I added a new convenience method to Zinc HTTP Components: ZnClient>>forJsonREST. This configures a ZnClient (HTTP client) to talk to standard JSON REST web services. Here are a couple of examples: > > ZnClient new > forJsonREST; > get: 'https://jsonplaceholder.typicode.com/users'. > > What #forJsonREST does is 3 things: set the 'Accept' header to 'application/json', install a #contentReader that parses incoming JSON as well as a #contentWriter that generates JSON. > > ZnClient new > systemPolicy; > forJsonREST; > url: 'https://jsonplaceholder.typicode.com/posts'; > contents: { #foo->1. #bar->2 } asDictionary; > post. > > As you can see, the full ZnClient API can be combined when needed. > > ZnClient new > forJsonREST; > post: 'https://jsonplaceholder.typicode.com/posts' > contents: (NeoJSONObject new foo: 1; bar: 2; yourself). > > #post:contents: combines separate #url: #contents: and #post message. > > #forJsonREST uses NeoJSON[Object|Writer] if found, else STONJSON. If both are missing, this results in an error. > > ZnClient new > systemPolicy; > forJsonREST; > url: 'http://easy.t3-platform.net/rest/geo-ip'; > queryAt: #address put: '81.83.7.35'; > get. > > Finally, here is a more sophisticated example, doing a DNS request over HTTPS: > > ZnClient new > systemPolicy; > beOneShot; > forJsonREST; > accept: 'application/dns-json'; > url: 'https://cloudflare-dns.com/dns-query'; > queryAt: #name put: 'stfx.eu'; > queryAt: #type put: #AAAA; > get. > > Note that in most cases, you will configure one client to a specific endpoint and keep on reusing it. At one point in time it might be good to #close the client (although that happens on finalise as well). For single requests, you can use #beOneShot. > > All this can be found in #bleedingEdge (HEAD). There are unit tests as well. > > Sven > > |
In reply to this post by Sven Van Caekenberghe-2
This is nice!
Doru > On Nov 7, 2018, at 5:36 PM, Sven Van Caekenberghe <[hidden email]> wrote: > > Hi, > > I added a new convenience method to Zinc HTTP Components: ZnClient>>forJsonREST. This configures a ZnClient (HTTP client) to talk to standard JSON REST web services. Here are a couple of examples: > > ZnClient new > forJsonREST; > get: 'https://jsonplaceholder.typicode.com/users'. > > What #forJsonREST does is 3 things: set the 'Accept' header to 'application/json', install a #contentReader that parses incoming JSON as well as a #contentWriter that generates JSON. > > ZnClient new > systemPolicy; > forJsonREST; > url: 'https://jsonplaceholder.typicode.com/posts'; > contents: { #foo->1. #bar->2 } asDictionary; > post. > > As you can see, the full ZnClient API can be combined when needed. > > ZnClient new > forJsonREST; > post: 'https://jsonplaceholder.typicode.com/posts' > contents: (NeoJSONObject new foo: 1; bar: 2; yourself). > > #post:contents: combines separate #url: #contents: and #post message. > > #forJsonREST uses NeoJSON[Object|Writer] if found, else STONJSON. If both are missing, this results in an error. > > ZnClient new > systemPolicy; > forJsonREST; > url: 'http://easy.t3-platform.net/rest/geo-ip'; > queryAt: #address put: '81.83.7.35'; > get. > > Finally, here is a more sophisticated example, doing a DNS request over HTTPS: > > ZnClient new > systemPolicy; > beOneShot; > forJsonREST; > accept: 'application/dns-json'; > url: 'https://cloudflare-dns.com/dns-query'; > queryAt: #name put: 'stfx.eu'; > queryAt: #type put: #AAAA; > get. > > Note that in most cases, you will configure one client to a specific endpoint and keep on reusing it. At one point in time it might be good to #close the client (although that happens on finalise as well). For single requests, you can use #beOneShot. > > All this can be found in #bleedingEdge (HEAD). There are unit tests as well. > > Sven > > -- www.feenk.com "In a world where everything is moving ever faster, one might have better chances to win by moving slower." |
Free forum by Nabble | Edit this page |