[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"project-7005348":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":34,"aspects":35,"strip":44,"post_text":46,"what":47,"said":86,"maker_in_thread":184,"shape":196,"grid":201,"attempts":393,"same_week":394,"maker_shows":39,"maker_hidden":422,"reader_version":423,"card":424},"7005348","Alpaca","Given an API, Generate client libraries in Node, Python, PHP, Ruby","title","Show HN: Given an API, Generate client libraries in Node, Python, PHP, Ruby","https:\u002F\u002Fgithub.com\u002Fpksunkara\u002Falpaca","github.com","sunkarapk",1388756810,2014,268,73,56,2272,3,"legend","dev_tools","client library generator","cli",[24,25,26,27],"api client generator","rest api","client library","code generation","curious",0.103,{"positive":31,"neutral":32,"mixed":18,"critical":33},8,18,6,35,{"idea":36,"design":38,"execution":40,"docs":42},{"positive":37,"critical":18},4,{"positive":39,"critical":39},1,{"positive":39,"critical":41},2,{"positive":39,"critical":43},0,[43,45,45,18,43,43,43,18,18,18,18,18,39,18,18,43,18,39,18,18,43,43,43,45,18,39,18,18,43,43,18,18,39,43,43,45,43,45,43,39],5,"PS: Assuming a REST architecture.",{"problem":48,"audience":55,"pricing":63,"motivation":64,"time_to_build":63,"stack":70,"openness":83,"stage":84,"team_size":85},{"value":49,"source":50,"evidence":51},"Writing and maintaining client libraries for REST APIs in several languages","maker",[52],{"id":53,"by":11,"text":54},"7005639","Being a WSDL is not the aim here. Generating client libraries in multiple programming languages is. But, to do that I need a format using which people can define their API. I…",{"value":56,"source":57,"evidence":58},"People building or consuming REST APIs who need clients in several languages","inferred",[59],{"id":60,"by":61,"text":62},"7006351","gamache","Ah, that makes more sense. I was under the impression that Alpaca was targeted at people writing the APIs. Neat tool!",null,{"value":65,"source":50,"evidence":66},"Automate developing and maintaining API client libraries in several languages",[67],{"id":68,"by":11,"text":69},"7005494","Currently, I am supporting 3 authentication strategies. Basic, Token in header and OAUTH. These will cover most of the APIs. And I am open to include other kind of authentication…",[71,79],{"value":72,"source":73,"evidence":74},"Go","commenter",[75],{"id":76,"by":77,"text":78},"7005656","squar1sm","I think this is fantastic. @sunkarapk, great job. That it's written in Go makes using it so much easier. Wonderful.",{"value":80,"source":50,"evidence":81},"JSON API description format",[82],{"id":53,"by":11,"text":54},"open_source","unknown","solo",{"praise":87,"objections":95,"requests":120,"questions":143,"alternatives":151},[88],{"value":89,"source":73,"evidence":90},"Useful, well-documented project with fast responses to pull requests",[91],{"id":92,"by":93,"text":94},"7006886","egonschiele","Useful, well-documented, TODOs right in the readme, and fast response for pull requests. I wish every open source project was like this.",[96,107,113],{"value":97,"source":73,"evidence":98},"Generated clients lack tests",[99,103],{"id":100,"by":101,"text":102},"7005735","jxf","Just tried this out and Alpaca is an awesome tool. However, I'd never want to release this in production without tests. Alpaca doesn't generate tests, so you're back to…",{"id":104,"by":105,"text":106},"7010605","dsl","If you have programmatically generated code, generating tests is almost completely useless (especially if the same code is generating the tests as well). A bunch of passing tests…",{"value":108,"source":73,"evidence":109},"Hypermedia APIs are a better fit than generating clients",[110],{"id":111,"by":61,"text":112},"7006146","Wouldn't it be wiser to choose a hypermedia format for the API, and then use a generic hypermedia client on whichever platform you like? Then you write just as many client…",{"value":114,"source":73,"evidence":115},"Authentication and OAuth support is limited",[116],{"id":117,"by":118,"text":119},"7005484","johnnyio","Describing an API is not hard, but the API authentication method is. How do you think you will do it? Edit : If you don't make oauth consumption simpler, you don't really solve…",[121,132],{"value":122,"source":73,"evidence":123},"Support for Objective-C, Java and Scala",[124,128],{"id":125,"by":126,"text":127},"7006653","rybosome","Hey, I noticed you mentioned that you were interested in having client library generation in Obj-C, Java, and Scala, yet all of the existing client lib support is for dynamic…",{"id":129,"by":130,"text":131},"7007041","elwell","Great idea! Including Obj-C would be very helpful.",{"value":133,"source":73,"evidence":134},"Use an existing schema standard instead of a new format",[135,139],{"id":136,"by":137,"text":138},"7005597","michaelmior","Why create a new format for describing APIs instead of using something like RAML? The client library generation is very useful, but it would be nice if there wasn't yet another…",{"id":140,"by":141,"text":142},"7010023","jodoglevy","Very cool, but why come up with a new API schema rather than use an open standard like OData (http:\u002F\u002Fwww.odata.org\u002F)? Then Alpaca would be compatible with a bunch of APIs that…",[144],{"value":145,"source":73,"evidence":146},"How does it differ from Swagger, Blueprint and similar tools",[147],{"id":148,"by":149,"text":150},"7005471","htuao","How do you differ from Swagger, Blueprint, I\u002FO Docs, RAML and all these API endpoint descriptions?",[152,159,170,177],{"value":153,"source":73,"evidence":154},"Apache Thrift",[155],{"id":156,"by":157,"text":158},"7005592","mattdawson","http:\u002F\u002Fthrift.apache.org\u002F",{"value":160,"source":73,"evidence":161},"Swagger codegen",[162,166],{"id":163,"by":164,"text":165},"7006410","matt_kantor","https:\u002F\u002Fgithub.com\u002Fwordnik\u002Fswagger-codegen",{"id":167,"by":168,"text":169},"7010271","fehguy","https:\u002F\u002Fgithub.com\u002Fwordnik\u002Fswagger-codegen does javascript, scala, java, objective-c, php, python (3), ruby, android, and even flash Also has the benefit of a commercial backer…",{"value":171,"source":73,"evidence":172},"SPORE",[173],{"id":174,"by":175,"text":176},"7008770","kimmel","I like the SPORE (Specification to a POrtable Rest Environment) approach better. You create a description file in JSON and each native language client can use that file to access…",{"value":178,"source":73,"evidence":179},"WSDL",[180],{"id":181,"by":182,"text":183},"7005615","mikekekeke","Am I right in thinking about this like a WSDL, but based on JSON?",{"comments":185,"answered":33,"key":186},10,[187,190,193],{"id":188,"text":189},"7006255","I agree its nice to do it that way. But I found that not all APIs use hypermedia format. So, I did it this way. :)",{"id":191,"text":192},"7005425","Author here. I covered almost everything in the documentation. And there is also a small example which is hosted at https:\u002F\u002Fgithub.com\u002Falpaca-api. Please ask if you have any…",{"id":194,"text":195},"7005569","I tried searching for a program which generates client libraries in different programming languages and failed. Could you please link if something does it? From what I gather,…",{"commenters":197,"max_depth":198,"maker_replies":185,"first_comment_mins":199,"lifespan_hours":200},49,7,17,36,[202,204,206,208,212,215,219,222,224,226,229,231,233,234,235,236,239,241,242,243,246,247,249,252,254,257,261,265,267,270,272,273,276,278,282,283,284,286,289,292,294,296,299,301,304,307,309,310,312,315,320,323,326,328,330,333,335,339,341,344,348,351,354,357,361,365,369,372,374,377,382,386,390],[111,43,43,203,61,43],"commenter\u002Fneutral\u002Fidea",[188,43,43,205,11,39],"maker\u002Fneutral\u002Fidea",[60,43,45,207,61,43],"project\u002Fpositive\u002Fidea",[209,43,45,210,211,43],"7006340","project\u002Fpositive\u002Fdesign","scarmig",[213,43,43,214,61,43],"7006441","commenter\u002Fneutral\u002Fnone",[216,43,18,217,218,43],"7006692","project\u002Fneutral\u002Fidea","rhizome31",[220,43,43,203,221,43],"7006767","steveklabnik",[223,43,43,203,61,43],"7007473",[225,43,43,203,218,43],"7010950",[227,43,43,203,228,43],"7012634","darrelmiller",[230,43,43,203,61,43],"7014032",[191,39,43,232,11,39],"maker\u002Fneutral\u002Fdocs",[148,39,18,217,149,43],[194,39,43,205,11,39],[156,39,18,217,157,43],[237,39,43,203,238,43],"7006044","jerf",[240,39,43,203,157,43],"7007632",[136,39,18,217,137,43],[163,39,18,217,164,43],[244,39,18,217,245,43],"7009765","fzltrp",[167,39,18,217,168,43],[125,39,39,248,126,43],"maker\u002Fcritical\u002Fdesign",[250,39,43,251,11,39],"7006712","maker\u002Fneutral\u002Fdesign",[100,41,18,253,101,43],"project\u002Fmixed\u002Fexecution",[255,41,43,256,11,39],"7005740","maker\u002Fneutral\u002Fexecution",[258,41,18,259,260,43],"7006232","project\u002Fneutral\u002Fexecution","X4",[262,41,43,263,264,43],"7006453","commenter\u002Fneutral\u002Fexecution","Robin_Message",[266,41,43,263,101,43],"7006787",[268,41,43,269,264,43],"7007727","commenter\u002Fpositive\u002Fnone",[104,41,39,271,105,43],"project\u002Fcritical\u002Fexecution",[174,18,45,207,175,43],[274,18,39,271,275,43],"7010234","CCs",[277,18,43,214,105,43],"7010611",[279,37,18,280,281,43],"7006745","project\u002Fmixed\u002Fdesign","memset",[181,45,18,217,182,43],[53,45,43,205,11,39],[285,45,43,203,182,43],"7005685",[287,45,43,203,288,43],"7007133","boomlinde",[290,45,43,203,291,43],"7008308","biot",[293,45,43,203,288,43],"7008638",[295,45,43,214,291,43],"7010816",[297,45,18,217,298,43],"7007840","MichaelGG",[76,33,45,300,77,43],"project\u002Fpositive\u002Fexecution",[302,198,18,280,303,43],"7007810","codereflection",[305,198,43,306,11,39],"7007876","maker\u002Fpositive\u002Fdesign",[117,31,39,308,118,43],"project\u002Fcritical\u002Fidea",[68,31,43,205,11,39],[140,311,18,217,141,43],9,[313,185,18,217,314,43],"7005792","acbart",[316,317,18,318,319,43],"7005527",11,"project\u002Fneutral\u002Fdocs","pjmlp",[321,317,43,214,322,43],"7005575","AznHisoka",[324,317,43,214,325,43],"7005805","thu",[327,317,43,214,118,43],"7005898",[329,317,43,214,319,43],"7008117",[331,317,18,318,332,43],"7006102","alok-g",[334,317,18,318,218,43],"7006584",[336,337,18,217,338,43],"7006068",12,"endeavour",[340,337,43,205,11,39],"7006098",[342,337,39,308,343,43],"7009906","sethrin",[345,346,18,318,347,43],"7006221",13,"mjs",[349,346,43,350,11,39],"7006242","maker\u002Fneutral\u002Fnone",[352,346,43,214,353,43],"7006728","lucaspiller",[355,346,43,214,356,43],"7006264","OGC",[358,359,45,207,360,43],"7007835",14,"abengoam",[362,363,45,207,364,43],"7008359",15,"mmccaff",[366,367,43,214,368,43],"7005997",16,"bashtian",[370,199,43,203,371,43],"7009081","reklaklislaw",[92,32,45,373,93,43],"project\u002Fpositive\u002Fdocs",[129,375,45,376,130,43],19,"project\u002Fpositive\u002Fnone",[378,379,43,380,381,43],"7006954",20,"other\u002Fneutral\u002Fnone","flippyhead",[383,379,43,384,385,43],"7007020","other\u002Fneutral\u002Fdocs","cvburgess",[387,388,39,308,389,43],"7008234",21,"notastartup",[391,388,18,217,392,43],"7009538","anonfunction",[],[395,399,404,409,414,419],{"id":396,"name":397,"points":398,"category":20},"7023393","Codebox",136,{"id":400,"name":401,"points":402,"category":403},"7017580","Sneakers",114,"infrastructure",{"id":405,"name":406,"points":407,"category":408},"7007216","weather-explorer",85,"data",{"id":410,"name":411,"points":412,"category":413},"7010000","LINQ",84,"languages",{"id":415,"name":416,"points":417,"category":418},"7000159","Lentor",69,"productivity",{"id":420,"name":421,"points":417,"category":413},"7019049","email",false,"v2",{"id":425,"name":5,"line":6,"ai":422,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":426,"top":18,"kw":427,"maker":11,"domain":10,"tier":19,"attempts":43,"strip":428,"url":9,"mix":429,"praise":89,"objection":97,"sub":21},7005348,0.1,[24,25,26,27],"0553000333331330313300053133003310050501",[31,32,18,33],1793990901264]