[{"data":1,"prerenderedAt":236},["ShallowReactive",2],{"project-4009170":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":43,"post_text":46,"what":47,"said":75,"maker_in_thread":143,"shape":145,"grid":148,"attempts":201,"same_week":202,"maker_shows":45,"maker_hidden":228,"reader_version":229,"card":230},"4009170","libsaas","libsaas, it's libcloud for SaaS","title","Show HN: libsaas, it's libcloud for SaaS","http:\u002F\u002Flibsaas.net","libsaas.net","dmarinoc",1337711718,2012,46,23,511,1677,31,"shown","dev_tools","api client library","library",[24,25,26,27],"saas api","python library","api wrapper","libcloud","curious",0.116,{"positive":31,"neutral":32,"mixed":33,"critical":34},4,7,1,2,14,{"idea":37,"execution":38,"privacy":40,"docs":41,"design":42},{"positive":34,"critical":33},{"positive":39,"critical":39},0,{"positive":39,"critical":33},{"positive":39,"critical":39},{"positive":39,"critical":39},[44,39,45,45,44,33,39,39,39,45,45,45,33,45,45,44,44,45,39,39,39,39,39],5,3,null,{"problem":48,"audience":56,"pricing":46,"motivation":46,"time_to_build":46,"stack":65,"openness":74,"stage":74,"team_size":74},{"value":49,"source":50,"evidence":51},"Each SaaS API uses different auth, formats and quirks, so developers must handle each one separately","commenter",[52],{"id":53,"by":54,"text":55},"4009599","wulczer","The lowest common denominator of SaaS APIs is HTTP. Apart from that, everyone does it different. Some use JSON, some use XML, some use SOAP... Sometimes you authenticate with…",{"value":57,"source":58,"evidence":59},"Developers integrating with SaaS APIs","inferred",[60,61],{"id":53,"by":54,"text":55},{"id":62,"by":63,"text":64},"4009576","johns","This is using the services' APIs, but standardizing as much as possible the Python code required to use them.",[66],{"value":67,"source":50,"evidence":68},"Python",[69,70],{"id":62,"by":63,"text":64},{"id":71,"by":72,"text":73},"4009700","bryanh","Very impressive. At Zapier we're building an internal tool very similar to this (and in Python to boot). Maybe we should hook up?","unknown",{"praise":76,"objections":89,"requests":114,"questions":127,"alternatives":135},[77,85],{"value":78,"source":50,"evidence":79},"Impressed by the idea and standardization",[80,81],{"id":71,"by":72,"text":73},{"id":82,"by":83,"text":84},"4009692","jmonegro","I quite like it. I'll get to porting it to Ruby.",{"value":86,"source":50,"evidence":87},"Hides differing SaaS API quirks from developers",[88],{"id":53,"by":54,"text":55},[90,97,104],{"value":91,"source":50,"evidence":92},"SaaS apps should export standard APIs instead of needing wrappers",[93],{"id":94,"by":95,"text":96},"4009559","jeffbarr","Isn't this what web services were promising us? Cool library, but ideally the SaaS apps would export APIs for this functionality.",{"value":98,"source":50,"evidence":99},"Plain HTTP would be simpler than wrapping APIs",[100],{"id":101,"by":102,"text":103},"4009793","thereason","Instead of hiding it, why don't we ditch it altogether? HTTP is simpler, more direct and easier to debug. By sticking to HTTP, we might get closer to a situation where \"everyone…",{"value":105,"source":50,"evidence":106},"Multi-language support is hard to achieve",[107,110],{"id":108,"by":54,"text":109},"4010266","There were some very sketchy plans about making this multilanguage... The best we could come up with was writing a small C module that would call Python code and that you could…",{"id":111,"by":112,"text":113},"4010894","drivebyacct2",">a small C module that would call Python code Seems strange to me. Seems like for a lot of this, where it's often HTTP based anyway, you could implement much of it in C without…",[115,123],{"value":116,"source":50,"evidence":117},"Ports to other languages such as Ruby",[118,119],{"id":82,"by":83,"text":84},{"id":120,"by":121,"text":122},"4010124","sgrove","Please do, would be very awesome!",{"value":124,"source":50,"evidence":125},"A way to support multiple languages without a DSL",[126],{"id":108,"by":54,"text":109},[128],{"value":129,"source":50,"evidence":130},"Why C instead of HTTP-based approach for multi-language use",[131,132],{"id":111,"by":112,"text":113},{"id":133,"by":112,"text":134},"4011108","Huh? We're talking about a library to use in applications, web apps or otherwise, and finding ways to make them usable with multiple languages. That screams \"C\", as every…",[136],{"value":137,"source":50,"evidence":138},"restwrapper, a JavaScript REST wrapper",[139],{"id":140,"by":141,"text":142},"4009537","olegp","I have written something similar in JavaScript: https:\u002F\u002Fgithub.com\u002Folegp\u002Frestwrapper",{"comments":39,"answered":39,"key":144},[],{"commenters":146,"max_depth":32,"maker_replies":39,"first_comment_mins":147,"lifespan_hours":14},13,32,[149,151,154,156,158,160,162,165,167,169,171,175,177,181,185,187,189,191,193,194,196,197,199],[71,39,44,150,72,39],"maker\u002Fpositive\u002Fidea",[152,39,39,153,54,39],"4010250","commenter\u002Fneutral\u002Fnone",[94,33,45,155,95,39],"project\u002Fmixed\u002Fidea",[62,33,45,157,63,39],"project\u002Fneutral\u002Fidea",[53,33,44,159,54,39],"project\u002Fpositive\u002Fidea",[101,33,33,161,102,39],"project\u002Fcritical\u002Fidea",[163,33,39,153,164,39],"4010835","legutierr",[166,33,39,153,112,39],"4010888",[140,34,39,168,141,39],"other\u002Fneutral\u002Fnone",[170,34,45,157,63,39],"4009584",[172,34,45,173,174,39],"4011065","project\u002Fneutral\u002Fexecution","alttab",[176,34,45,173,141,39],"4013027",[178,45,33,179,180,39],"4009359","project\u002Fcritical\u002Fprivacy","someone13",[182,45,45,183,184,39],"4009377","maker\u002Fneutral\u002Fdocs","aitorciki",[186,45,45,183,54,39],"4009387",[82,31,44,188,83,39],"project\u002Fpositive\u002Fnone",[120,31,44,190,121,39],"maker\u002Fpositive\u002Fnone",[108,31,45,192,54,39],"project\u002Fneutral\u002Fdesign",[111,31,39,153,112,39],[195,31,39,153,174,39],"4011060",[133,31,39,153,112,39],[198,31,39,153,174,39],"4018072",[200,31,39,153,112,39],"4019142",[],[203,208,212,216,220,224],{"id":204,"name":205,"points":206,"category":207},"3998894","Habit List",282,"productivity",{"id":209,"name":210,"points":211,"category":20},"4015393","Dropzone",190,{"id":213,"name":214,"points":215,"category":20},"3998710","Worqshop",183,{"id":217,"name":218,"points":219,"category":207},"4010355","Hacking recruiting",180,{"id":221,"name":222,"points":223,"category":207},"3996457","DailyDo.it",142,{"id":225,"name":226,"points":227,"category":207},"4015696","clipboard.com",104,false,"v2",{"id":231,"name":5,"line":6,"ai":228,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":232,"top":18,"kw":233,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":234,"url":9,"mix":235,"praise":78,"objection":91,"sub":21},4009170,0.12,[24,25,26,27],"50335100033313355300000",[31,32,33,34],1793990881675]