#random (2019-09)
Non-work banter and water cooler conversation
A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you’d prefer to keep out of more focused work-related channels.
Archive: https://archive.sweetops.com/random/
2019-09-02
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
https://www.youtube.com/watch?v=uDi3zqb3gAA quite old but still worth a watch about how a missing IAM key led to circleCI’s biggest security incident caused by 3rd party provider
2019-09-03
![oscar avatar](https://avatars.slack-edge.com/2019-08-22/729046633025_ec6984778c640b0e709e_72.jpg)
Cloud Conformity highlights violations of AWS and Azure best practices, delivering over 500 different checks across all key areas — security, reliabili…
2019-09-05
![loren avatar](https://secure.gravatar.com/avatar/d1e25dcfbc68a0857a04dd78c9afe952.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png)
anyone use mergify? looks pretty slick… https://mergify.io/
![oscar avatar](https://avatars.slack-edge.com/2019-08-22/729046633025_ec6984778c640b0e709e_72.jpg)
No but have used individual things together to create a similar workflow
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
so… you still need to have tests, you still need to expose coverage, you still need to provide codestyle
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
so why not to utilize github protected branching with checks
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
run all those things in your CI and ask PR to be mergeable only after at least some number of people reviewed the change and all the created tests are passing
![oscar avatar](https://avatars.slack-edge.com/2019-08-22/729046633025_ec6984778c640b0e709e_72.jpg)
^ basically what I had happening. There’s then this github tool you can use that checks if all Statuses have passed and if so merge
![oscar avatar](https://avatars.slack-edge.com/2019-08-22/729046633025_ec6984778c640b0e709e_72.jpg)
Seems like mergify is convenient but you sacrifice ability to perhaps use other tools?
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
for me it’s a question of do i really want another 3rd party service to access my sourcecode
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
github.com ok, my ci of choice ok, but github apps doing security scanning, some merge helper tools it’s questionable
![loren avatar](https://secure.gravatar.com/avatar/d1e25dcfbc68a0857a04dd78c9afe952.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png)
we’ve been using dependabot to create prs to test new versions of dependencies. it gets to be a lot of prs. the CI does run all such tests on all such PRs and marks the commit with the status, but then we still have to go in and mark it approved and merge it. just looking for a way to automate that workflow for specific conditions
![loren avatar](https://secure.gravatar.com/avatar/d1e25dcfbc68a0857a04dd78c9afe952.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png)
we mostly just have public projects, so not especially concerned about read access (they already have it). the write access required is a concern though, would be great if github had more granular repo permissions
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
a scheduled job in you ci which pulls the list of open prs and goes through them to check whether or not it was approved and merge the ones which have tests passed and been approved seems like few liner in python
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
especially that you can set github in a way that it prevents merging if a pr was not approved by a certain number of people
![loren avatar](https://secure.gravatar.com/avatar/d1e25dcfbc68a0857a04dd78c9afe952.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0003-72.png)
Yeah sure, just nice to build on something used by a wider community. Decisions around config names and structures get paralyzing, and there are a lot of unknown unknowns for any one person. Having input from lots of users and use cases is huge
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
in some projects we use whitesource bolt for github to keep an eye on vulns in our dependencies, and the way they do writes to our projects is by creating PRs that are reviewed by us
2019-09-08
![johntellsall avatar](https://secure.gravatar.com/avatar/9120a17d44e0c40f2b781ec94a0cd43e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-72.png)
Los Angeles: hi all! I hope you will join us this Wednesday at the TestableLA meetup. This time we’re talking about testing Machine Learning, and testing DevOps! https://www.meetup.com/testable/events/wmkmdqyzmbpb/
![attachment image](https://secure.meetupstatic.com/photos/event/1/8/e/9/600_480546377.jpeg)
Wed, Sep 11, 2019, 6:30 PM: TestableLA is all about testing - how to write better tests, and how to make your code easier to test. We welcome talks on a variety of technologies and programming languag
2019-09-09
![Nikola Velkovski avatar](https://avatars.slack-edge.com/2018-11-08/474538495603_cc9e62a39b3dbc9d8d65_72.png)
A Multifunctional Laser Tripwire. Contribute to dekuNukem/daytripper development by creating an account on GitHub.
2019-09-10
![Erik Osterman (Cloud Posse) avatar](https://secure.gravatar.com/avatar/88c480d4f73b813904e00a5695a454cb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png)
Hilarious
![Alex Siegman avatar](https://avatars.slack-edge.com/2019-04-10/592429074434_cea95e800f54d8ea3544_72.jpg)
Man, if I had an office I’d totally build daytripper~ lol
2019-09-17
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
Anyone have experience/know of a framework (i’m thinking of something like an API gateway) that allows you to combine responses from 2 different microservices and return to client as a unified response?
An example is having a Post microservice, and a analytics microservice. -The post service returns post information for each post (text, author, title, description … etc) -Analytics service has a different DB and hold analytics related info for each post, e.g. (views, likes, .. etc)
I’m looking for a way, to have a single request from a client to then request information from analytics and post service, join the responses and return to client as aggregate response
I have done some research and found KrakenD but have never heard of it before.
![PiotrP avatar](https://secure.gravatar.com/avatar/61c57d8f90dabc894afc25195e379eb5.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-72.png)
I have Nginx/openresty and some other services running on one VM. Basically VM accepts requests on Openresty and then openresty forwards requests to appropriate service. e.g. below requests getting
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
Essentially an api / endpoint that hits two different endpoints and maps the results?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
yeah
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
Smells more like a data mapping problem than something a whole framework would do
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
what are common approaches to solving that problem?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I’ve used a few different libraries for mapping data
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but haven’t been super happy with any of them
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but it isn’t too hard to roll your own
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
the simplest approach is to call analytics service from post service, but it would be slower
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
Well, that’s kind of an interesting question. Is this “middle” layer part of one of the other microservices or is it its own service?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
The other question worth asking is why not have the client send two API calls?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
^^ true
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
what language or API framework do the microservices currently use?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
what do you mean middle layer?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
client -> middle -> Post, Analytics
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
the client has to hit some api
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
okay gotcha
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
It sounds like that API should hit the other two APIs
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
the frameworks we currently have are java/spring-boot and python/django
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
so, Django Rest Framework has pretty good mapping support
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it can get pretty complicated though
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but I’ve set up “remote api” serializers using it
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
so client -> API 1 -> API 2
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
we used it to migrate the client over to API 2 with no disruption
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but you could use it to do what you are talking about
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it’s not out of the box, though
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
so in your example above, all requests go through API 1 ?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yeah
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
your example would add a second call
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
client -> API 1 -> API 2 + API 3
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
where API 1 is calling both 2 and 3
![Erik Osterman (Cloud Posse) avatar](https://secure.gravatar.com/avatar/88c480d4f73b813904e00a5695a454cb.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0023-72.png)
(and ideally async)
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
and then join everything together in API 1?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yeah
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
that’s a way to do it
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but it worked well enough
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
can you see that link?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
that’s the code we used for the the base remote serializer
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
that works with Django Rest Framework
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
yeah i see that, thank you
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but if you aren’t used to DRF
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it might not be obvious how to get it all hooked up
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but you can see the AuthClient
bit at the top
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
that is API 1’s interaction class for talking to API 2
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
ah I see
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
does managing api changes become difficult?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yes
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
you are explicitly coupling API 1 to API 2 and 3
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
and the the client gets coupled to API 1
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
so going back to asking the question, why not two calls?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
i dont know
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
if the client already knows about API 2 and 3
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
i didnt think of that
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
then it probably isn’t worth it to try and combine the calls
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
unless you are making thousands of them a minute
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
here’s how you’d end up using the RemoteSerializer: https://gist.github.com/MrHen/6e96f2aa2729446c15ed4ef4189a087b#file-serializers-py
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
okay so maybe some background. We are somewhat in the phase of migrating to microservices. So authentication is handled by one of those microservices. In the case of 2 requests would we have to have a centralized authentication?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
ah, yeah, okay
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
so you’ll probably want to add the auth calls
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
directly to the previously existing api
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
and then once hte auth microservice is up and running
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
switch the client to hit the auth service
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
then remove the call between the existing api and the auth service
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but if you need to do backend permissions / validation
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
you might always have a call between the existing api and the auth service
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it really depends on the details
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but I would say that the end shape should probably be the client making two calls
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but that’s just my opinion
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
we recently made the exact same change in our platform
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
the RemoteSerializer from above was used to start migrating calls over to the new api
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
okay so youre saying, (I’m assuming there are 2 APIs: API1 and API2) if API1 handles authentication and API2 does not, then call the auth endpoints from API2 -> API1 when receiving request on API2
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
and if authentication is separated into its own service then API1 would call auth service (API3) and API2 would also call auth service(API3)
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yeah, something like that
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
the details vary case by case
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
but hopefully that helps a bit
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I don’t know that you are going to find a dedicated backend framework that will hook all this up
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I do know that Django has some remote auth functionality
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
Well i found KrakenD which seems to aggregate responses from multiple services
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
and using a config file for rules
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
have you ever heard of that?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I haven’t
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
and also yes, this is very helpful. Thanks
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
oh, actually, I have seen some stuff like this
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
usually it’s integrating with external apis
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
KrakenD seems kind of interesting
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I’m not sure I’d want to bake in that dependency though
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
yeah it seems to do exactly what I want, but i’m worried it could stop being developed
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yeah, tough call
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
like this is the main functionality i really like about it
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
yeah, looks kind of interesting
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I think people tend to be a little too eager to combine api calls, though
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I think making multiple calls can be totally fine
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it depends on the situation
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
the best argument for combining calls is related to things like VPCs or protected / hidden endpoints
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
the best argument against combining calls is that a change to API A will require a change to the client and your KrakenD config
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
here is the exact situation, which maybe would make sense for a combined call or not. Let me know what you think.
- request to API1 get most recent posts (so you dont know postIds when making initial call from client)
- client has to wait for response (post Ids) from API1 in order to make the call to API2
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
I do like the 2 requests approach though…. I just dont want it to be too slow
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
it won’t be slower than combining the two calls
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
since both calls still have to happen
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
do you send a single request to API 2 with the post ids?
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
or are you looping over each post id and calling API 2 for each id?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
yeah single request
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
but when combining you could do them asynchrounously
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
i guess not a huge gain
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
you still need the post ids for the second call, right?
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
yeah you needs post ids for second call
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
so you still have to wait for the post ids to “resolve”
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
which is going to be the longest part of the call
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
ahh yeah youre right
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
I’d start by trying two calls from the client
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
and measure how long it takes
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
since it would be the simplest approach
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
Awesome, yeah i’m going to start with that.
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
thanks for your help
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
no problem!
![mrhen avatar](https://avatars.slack-edge.com/2019-02-15/552411651075_818c49cf5f298bed6834_72.png)
good luck!
![casey avatar](https://secure.gravatar.com/avatar/da69ad958719719e3fe921887eb73b1f.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
thanks!!
2019-09-21
![jetstreamin avatar](https://avatars.slack-edge.com/2019-09-16/763257869687_cf8bef44a723246a3655_72.jpg)
anyone ever try this out?
![jetstreamin avatar](https://avatars.slack-edge.com/2019-09-16/763257869687_cf8bef44a723246a3655_72.jpg)
Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.
![jetstreamin avatar](https://avatars.slack-edge.com/2019-09-16/763257869687_cf8bef44a723246a3655_72.jpg)
I like what they are preaching over there
![jetstreamin avatar](https://avatars.slack-edge.com/2019-09-16/763257869687_cf8bef44a723246a3655_72.jpg)
the docs are amazing, https://vertx.io/docs/
Eclipse Vert.x is a tool-kit for building reactive applications on the JVM.
2019-09-27
![roth.andy avatar](https://avatars.slack-edge.com/2019-09-18/753707271651_6f58c1cbab3c77754f58_72.jpg)
Just in case even 1 person in the 1,411 people here don’t know it: Python 2 end of life is January 1.
Tell your friends. Tell your coworkers at the water cooler. Tell your mailman. Tell your customer you’ve had for 10 years who doesn’t want to change anything. Tell your dog .
Friends don’t let friends use python 2.
The official home of the Python Programming Language
Python 2.7 will retire in 2020. Learn more and see the countdown here.
![doge](/assets/images/custom_emojis/doge.png)
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
Except RHEL https://access.redhat.com/solutions/4455511
How is Python 2 supported in RHEL after 2020? How long will Python 2.7 be supported within Red Hat products? As per https://pythonclock.org the Python project is retiring development on Python 2 Jan 1st, 2020. What happens after this date? Python2 is available in an Application stream in RHEL8. Can you let me know what that means for the Python 2 lifecycle within RHEL8? Will Python 2 be available for the entire life of RHEL 8? Will Red Hat continue to provide bugfix/security errata to Python 2 after the EOL of the language?
![Robert avatar](https://secure.gravatar.com/avatar/3fbe136a12776f5be5f78e7fb59d3ce0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0014-72.png)
![Robert avatar](https://secure.gravatar.com/avatar/3fbe136a12776f5be5f78e7fb59d3ce0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0014-72.png)
@Maciek Strömich ^^
![Robert avatar](https://secure.gravatar.com/avatar/3fbe136a12776f5be5f78e7fb59d3ce0.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0014-72.png)
But interesting.. I didn’t know that RHEL would support Python 2 until mid 2024.
![Maciek Strömich avatar](https://secure.gravatar.com/avatar/98de12365b633b063e208220100d4594.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0002-72.png)
@Robert considering the speed of doing things in large enterprises/government institutions (some still are forced to use IE6/IE7 ffs ) it’s was kind of obvious that this would happen especially that RHcustomers pay for the support
![Doug Farrell avatar](https://secure.gravatar.com/avatar/4e3f9d8bb67ab217b73630cc74fec7b4.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0005-72.png)
@Doug Farrell has joined the channel
![Rajesh Babu Gangula avatar](https://secure.gravatar.com/avatar/e18405209d357c71c5b29715880ddb48.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png)
@Rajesh Babu Gangula has joined the channel
![Sebastian Cavedale avatar](https://avatars.slack-edge.com/2019-09-27/778261140663_f1a1630e1a8ed8be5e24_72.jpg)
@Sebastian Cavedale has joined the channel
![jacob avatar](https://secure.gravatar.com/avatar/9dc6bc6b48892f3d2187417f116a6ac1.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-72.png)
@jacob has joined the channel
2019-09-28
![Nick S avatar](https://secure.gravatar.com/avatar/6955c4a26eca42fded9a4adef7fe0b09.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-72.png)
@Nick S has joined the channel
2019-09-29
![daniel avatar](https://secure.gravatar.com/avatar/dbe624efe8da04427acfc42bda72f069.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0010-72.png)
@daniel has joined the channel
![coreycarvalho avatar](https://secure.gravatar.com/avatar/92ab67717ff74d48ef0f315b7f75a88a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-72.png)
@coreycarvalho has joined the channel
2019-09-30
![Manuel Urbano avatar](https://secure.gravatar.com/avatar/3c0bd443ede70e5f100be54f12725493.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0022-72.png)
@Manuel Urbano has joined the channel
![Walter Heck avatar](https://secure.gravatar.com/avatar/f06c890ad6ae7d6241a857a68e1ebc22.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png)
@Walter Heck has joined the channel
![Ognen Mitev avatar](https://avatars.slack-edge.com/2020-12-03/1552932767028_05f7bc67f6088fa791b4_72.png)
@Ognen Mitev has joined the channel
![Dipesh Patel avatar](https://secure.gravatar.com/avatar/c62e478e58793c4b8347db3e04bf746d.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-72.png)
@Dipesh Patel has joined the channel