
èå³ãããã°ãç«ã®äžã§ãé¡ãããŸãã
ãã®ããããã®ã¬ãã¥ãŒèšäºã§ãã®ã®ã£ãããåããæçµçã«ã¯ãã®ããŒã«ã䜿çšããŠèªåã®æã§äœããæ§ç¯ããããšããŸããããã¯ç·Žç¿ã§ããŸã䜿çšã§ããéåžžã«æºè¶³ããŠããŸãã
ServiceStackïŒ ããããèããŠããŸãã...
ãŸããServiceStackèªäœãšã¯äœããšãã質åã«çããŸãããã ããã¯ãWebãµãŒãã¹ãšWebã¢ããªã±ãŒã·ã§ã³ãäœæããããã®æ¬æ Œçãªãã¬ãŒã ã¯ãŒã¯ã§ãããCïŒãšASP.Netã®äžçæé«ã®æ©èœãçµã¿èŸŒãã§ããŸãã -ãã¹ãŠã®ææªã®ãäžèŠãªãäžèŠãªãã®ãåãé€ããŸããã ãããã芪æãªããã©ãžãã«ãç§ãã¡ã¯ããã«èŠåããŸããããªããŒã¯ãããŸãããä»é±ã®æšææ¥ã§ã¯ãªããç§ãã¡ã«ããããŸããïŒ ä»åŸãã³ã³ããŒãã³ããåäžã®ã·ã¹ãã ã«æ¥ç¶ããã¢ãŒããã¯ãã£äžã®ããªãšãŒã·ã§ã³ããããServiceStackïŒãµãŒããŒãšããŠïŒãšãASP.Net MVCïŒã¯ã©ã€ã¢ã³ããšããŠïŒã®äž¡æ¹ã«èšè¿°ãããŠããããšã«æ³šæããŠãã ããã
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯BBC瀟ã®è žå ã§çãŸãã ããã¹ããããã¯ããã§åããŠããŸããã ãã¬ãŒã ã¯ãŒã¯ã®éçºã®å§ãŸãã¯ã2007幎ãšèŠãªãããšãã§ããŸããBBCã¯ããã€ã¯ããœããã®æšæºãšã³ã¿ãŒãã©ã€ãºãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãæ¥éã«å€åããèŠä»¶ã®æ¡ä»¶ã§ã®éçºãžã®ãŠã©ãŒã¿ãŒãã©ãŒã«ã¢ãããŒããšçžãŸã£ãŠãç©Žã«çŽæ¥èœã¡ãããããŒããŠã³ãã¯æ ç»ã®äž»äººå ¬ãããŒã¿ãã¬ã«ã³ãã«ãã£ãŠäžããããå®çŸ©ã«è¿ããªããŸãã Zhmurkiãã説æèŸæžã®å®çŸ©ã§ã¯ãªã*ã
ãã®åé¡ã¯ãããããå°ããªå€æŽãè¡ãããã«ãUMLããæ°æ¥ãããã³ãŒããŸã§ã®ãµã€ã¯ã«ãå€ãã¬ã³ãŒããšæ°ããã¬ã³ãŒãéã®ãã©ãŒãããã®äºææ§ã®ããã®ããããçš®é¡ã®æŸèæãããã³ã¡ãžã£ãŒãªãªãŒã¹éã®æ¯é±ã®ããŠã³ã¿ã€ã ãçµãå¿ èŠãããããšã§ããã
ããŒã ã¯ç°¡åãªè³ªåãæããããŸããããµãŒãã¹ã¯ãã¹ãŠåãã§ããïŒ è³ªåã¯ååãšããŠè€éã§ã¯ãªããç§ãã¡ã®å€ãã¯ããã«å¯ŸããŠåãçããããŸãïŒ
- ããã¯ãç¹å®ã®ãã©ãããã©ãŒã ãŸãã¯ãã¯ãããžãŒã匷å¶ããæ¹æ³ã§ã¯ãããŸããã
- ããã¯ãäºåå®çŸ©ãããå¶éã課ãæ¹æ³ã§ã¯ãããŸããã
- ããã¯ãäºåã«å®çŸ©ããããã©ãŒãããã䜿çšããããäºåã«å®çŸ©ãããã¢ãŒããã¯ãã£ã«åŸãçç±ã«ã¯ãªããŸããã
- ããã¯ããµãŒãã¹ã®æäŸã§ãããæè¡çãªèšèªãåå©çšå¯èœãªæ©èœã®ã«ãã»ã«åãããã³å¯çšæ§ã®çµç¹ã§ãã
- æå°éã®ã³ã¹ããšæ倧éã®åå©çšã§ãæãç°¡åãã€å¹ççãªæ¹æ³ã§ãã§ããã ãå€ãã®é¡§å®¢ã«å¯çšæ§ãã¢ã¬ã³ãžããŸãã
ããããµãŒãã¹ã®å®çŸ©ã§ãã ããã«å ããŠãåªãããµãŒãã¹ã¯ãä»åŸã®å€æŽãå©é·ããå€æŽãåé¡ã«ãªããªãããã«èšèšããå¿ èŠããããŸãã
ãã®åé¡ãåæ ããŠServiceStackãèªçããŸãããããã«ãããããŒã ã®ååã ãã以åã®ããŒã å šäœãããè¯ãçµæãéæããããšãã§ããŸããã
ããã§ãã圌ã¯äœãè¯ãã§ããïŒ
- ããçŽæçã§äœ¿ããããã
- æšæºã®.Netãœãªã¥ãŒã·ã§ã³ãšæ¯èŒããŠé«é
- å°ãªãçŽæ¥çãªæã§ããé«ã¬ãã«ã®ã³ãŒãã®åå©çšãå®çŸã§ããŸã
æåŸã®ç¹ã«é¢ããŠã¯ããã¡ãããé«ã¬ãã«ã®ã³ãŒãã®åå©çšã«çŽæ¥æãæºããŠãæšæºã®Microsoftãœãªã¥ãŒã·ã§ã³ã䜿çšããŠéæã§ããå¯èœæ§ãååã«ããããšãäºçŽããå¿ èŠããããŸãã ãã ãããã®å ŽåãããŸã£ãããªè ãšé©åãªã¢ãããŒããšçµéšãå¿ èŠã§ãã ServiceStackã¢ãŒããã¯ãã£ã®åçŽããšæ¯èŒå€©æã«ãããã¹ãã«ã®äœãéçºè ã¯ããè¯ãçµæãéæã§ããã³ãŒãæ§é ã«å¯Ÿããããå¹ççãªã¢ãããŒããžã®ã³ãããã¡ã³ããéçºããããšãã§ããŸãã
ãããŠããããããäžéšã®äººã«ãšã£ãŠã次ã®ç¬éã¯å®å šã«æ±ºå®çãªãã®ã«ãªãã§ãããïŒ

ServiceStackãããžã§ã¯ãã¯ãããã«Linuxã«ãããã€ã§ããŸãïŒ
ãããã£ãŠãé«äŸ¡ãªWindows Azureã®è²»çšãæ¯æãå¿ èŠã¯ãªããããã«é«äŸ¡ãªç¬èªã®Windows Serverãç¶æããå¿ èŠããããŸããã äžèŠæš¡ã®ãããžã§ã¯ãã®å Žåãéåžžã®ãµãŒããŒã§ããããšãã°DebianãŸãã¯UbuntuãµãŒããŒããŸãã¯æé¡30ãã«ã§Hetzner VPSã䜿çšã§ããŸãã å°ããªãããžã§ã¯ãã®å Žåã Hetznerã§10ãã«ããŸãã¯Digital Oceanã§5 ãã«ã®æãå®ãVPSã䜿çšãããŸãã
ç§ãã¡ã®ããŒãããŒã¯ãnginx + FastCGI Monoã䜿çšããŠLinuxã§ServiceStackãããžã§ã¯ããå±éããã³ãã¹ãããçµéšããããããã«èå³ããããªããäžç·ã«å°ããŠãã圌ããç§ãã¡ã«ããã¯è©³çŽ°ã«è¡ãããŸãã
æè¡çãªè©³çŽ°ãæããŠããããŸããïŒ
ServiceStackã®åºç€ã¯DTOïŒããŒã¿è»¢éãªããžã§ã¯ãïŒã§ããããã©ãããªPOCOãªããžã§ã¯ãã«åºã¥ããŠããŸãã èªèšŒãããã€ããŒãšã»ãã·ã§ã³ãããã³ãŠãŒã¶ãŒãµãŒãã¹ã¯POCOã«åºã¥ããŠãããããŸããŸãªå®è£ ã«ããŸããŸãªããã¯ãšã³ãã䜿çšã§ããŸãã ããšãã°ãããã«äœ¿çšã§ããããã«ãå ¥åãããã»ãã·ã§ã³ã¯ãã¡ã¢ãªãšRedisã«çŽæ¥ä¿åã§ããŸãã åæå®ãããŠããªãã»ãã·ã§ã³ã¯ããã€ãããºã ã®æ奜家ã«ãå©çšã§ããŸãããæ®å¿µãªãããããã¯å€å°é ããªããŸãã
æ®å¿µãªããã1ã€ã®èšäºã§ãã¬ãŒã ã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ã詳现ã«æ€èšããã®ã¯çŸå®çã§ã¯ãããŸãããã奜å¥å¿Haçãªããããã¹ã¯åžæ°ããã®é¢å¿ãããã°ãå°æ¥ãããã«é¢ããäžé£ã®èšäºãæžãããšãã§ããŸãã ãããŸã§ã®éãèªè ã®é£æ¬²ãããããããã«ã¡ãã£ãšããHelloWorldãæžããŠãã ããã
æ°Žã泚ãã®ã«è¯ããã³ãŒãã«æ¥ãŠïŒ
ãããã£ãŠãServiceStackãããžã§ã¯ãã§WebãµãŒãã¹ãäœæããã«ã¯ã次ã®4ã€ã®ç°¡åãªããšãè¡ãå¿ èŠããããŸãã
- DTOãµãŒãã¹ãªã¯ãšã¹ãã®ã¯ã©ã¹ãäœæãã
- DTOãµãŒãã¹ã¬ã¹ãã³ã¹ã®ã¯ã©ã¹ãäœæãã
- ãµãŒãã¹èªäœã®ã¯ã©ã¹ãäœæããåºæ¬ã¯ã©ã¹ãããããç¶æ¿ããå®è£ ããå¿ èŠãããHTTPã¡ãœããã§åãååã®ã¡ãœããããªãŒããŒã©ã€ãããŸã
- 人çã楜ããã§å©çãåŸãïŒåè«...ãããã ãããåè«ã§ã¯ãªã ïŒ
ç°¡åãªãµãŒãã¹ãæžããŸãããã
Visual StudioãŸãã¯Xamarin Studioã§æ°ãããããžã§ã¯ããäœæããŸãã æå ã«æåã®ãã®ãååšããªãå Žåã幞ããªããšã«ãã¢ãã®äžã§ãã¹ãŠãããŸãæ©èœããŸãïŒãããŠãç§ãã¡ã«ãšã£ãŠãã®èŠçŽ ã¯æåã¯æ±ºå®çã§ããïŒã ãããŠãæé«ã®IDEã䜿çšããªãããšã«å¯Ÿããè£åãšããŠãæé«ã®ã¢ãã€ã«OSã®ããã«ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãããã®ãµãŒãã¹ã䜿çšããæ¹æ³ã瀺ããŸãã
ãããã£ãŠã空ã®ASP.Netãããžã§ã¯ãïŒç©ºã®Webã¢ããªã±ãŒã·ã§ã³ïŒãäœæããŸãã ãœãªã¥ãŒã·ã§ã³ãSSHelloWorldããããžã§ã¯ããSSHelloAPIãšåŒã³ãŸãã
ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã®ãããžã§ã¯ãã®å Žåãå³ã¯ãªãã¯ããŠ[Nugetããã±ãŒãžã®ç®¡ç]ãéžæããŸãã

ãè¿œå ããã¿ã³ãã¯ãªãã¯ãããšãã©ã€ã»ã³ã¹å¥çŽã«åæãããã©ããå°ããããŸãã ãŸãããªããªã ãã·ã¢èªã話ããŠãŒã¶ãŒã¯ãä»ã®èª°ãããæ©ãã©ã€ã»ã³ã¹å¥çŽãèªã¿ãåæããããŠã³ããŒãããServiceStack dllããããžã§ã¯ãã«æ¥ç¶ãããŸãã
ãããžã§ã¯ãã«Global.asaxããªãå ŽåïŒçè«äžã¯ååšããªãã¯ãã§ãïŒããããè¿œå ãã次ã®ã³ãŒãããããäœã§ãããã§ã¯ãªãGlobal.asax.csã«ã³ããŒããŸãã
using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.SessionState; using ServiceStack; namespace SSHelloAPI { public class Global : System.Web.HttpApplication { public class AppHost : AppHostBase { public AppHost() : base("Hello API", typeof(HelloService).Assembly) {} public override void Configure (Funq.Container container) { } } protected void Application_Start (Object sender, EventArgs e) { new AppHost ().Init (); } } }
ã³ãŒãå ã®ãšã©ãŒã匷調衚瀺ããããšã«æ³šæãæããªãã§ãã ããã ãµãŒãã¹ãé 眮ããã¯ã©ã¹ãäœæããå¿ èŠããããŸãã
ãŸããããããweb.configãã¡ã€ã«ãæåã§äœæããå¿ èŠããããŸã ã ãŸãããã®ã³ãŒãã¯ãã¹ãŠæ¬¡ã®ããã«çœ®ãæããå¿ èŠããããŸãã
<?xml version="1.0"?> <configuration> <system.web> <httpHandlers> <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*"/> </httpHandlers> </system.web> <!-- Required for IIS 7.0 (and above?) --> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> </handlers> </system.webServer> </configuration>
æåŸã«ã3ã€ã®ã¯ã©ã¹ãå«ãæ°ããHelloService.csãã¡ã€ã«ãäœæããŸãã
using System; using ServiceStack; namespace SSHelloAPI { [Route("/hello")] [Route("/hello/{Name}")] public class HelloRequest { public string Name { get; set; } } public class HelloResponse { public string Result { get; set; } } public class HelloService : Service { public object Any(HelloRequest request) { return new HelloResponse { Result = "Hello, " + request.Name }; } } }
ãã¹ãŠãã·ã³ãã«ã§æ確ã§ãããã®ãããªã³ãŒãã«ã€ããŠã³ã¡ã³ãããããšããæ¥ããããæããŸãã ãããžã§ã¯ããã³ã³ãã€ã«ããŠå®è¡ãããã©ãŠã¶ã®ã¢ãã¬ã¹ããŒã§ããã¹ãåãšããŒãã®åŸã«ã/ hello / Habrauserããšå ¥åããŸãã ãªã¯ãšã¹ãããããŒèªäœã«ããServiceStackã¯ãã¯ã©ã€ã¢ã³ãã®ã¿ã€ãã決å®ããŸãããã®å Žåãhtmlã©ãããŒã§ãµãŒãã¹ã®å¿çã衚瀺ããŸãã [çµæ]ãã£ãŒã«ãã«ã¯ããµãŒãã¹ãç§ãã¡ãã©ã®ããã«æè¿ããŠãããã衚瀺ãããŸãã
Anyã¡ãœããã®ååã¯ããã¹ãŠã®HTTPã¡ãœããã«åãããžãã¯ãå®çŸ©ããããšãæå³ããŸãã
ãããžã§ã¯ããéå§ãããšæåã«éãã¡ã¿ããŒã¿ããŒãžã«æ³šæããŠãã ããã èªåçã«çæããããµãŒãã¹ããã¥ã¡ã³ããå«ãŸããŠããŸãã ã芧ã®ãšãããServiceStackã¯å€åºå ã§ããŸããŸãªãšã³ããã€ã³ããäœæããRESTfulãµãŒãã¹ãšSOAPãµãŒãã¹ïŒã¯ããSOAPã芪æãªãèªè ïŒã®äž¡æ¹ã§ãµãŒãã¹ãæäœã§ããŸãã

ãã¡ããããã®ãµãŒãã¹ã¯éå±ã§ãããèšäºãéè² è·ã«ããªãããã«ãããã«ãã£ãšè€éãªäŸãå«ããŸããã§ããã ããããããã¯ããªãã«SericeStackã®å³ãæããããŸããèå³ãããã°ãä»-ç§ãã¡ã®æç¡ã«ãããããããã£ãšå³ããããšãã§ããŸãã
ServiceStackãã¢ãã€ã«éçºè ã®ç掻ã楜ã«ããæ¹æ³
ServiceStackã®ãã1ã€ã®è¯ãç¹ã¯ãWindows PhoneãXamarin.iOSãŸãã¯Xamarin.Android-applicationã§äœæãããµãŒãã¹ã䜿çšãããšéåžžã«äŸ¿å©ãªããšã§ãïŒãã ããæåŸã®2ã€ã¯Xamarinã®ããžãã¹ã©ã€ã»ã³ã¹ãå¿ èŠã§ãïŒã ããŸããŸãªæ¹æ³ããããŸãããæãåçŽãªæ¹æ³ïŒãã ããæãçŸããæ¹æ³ã§ã¯ãããŸããïŒã¯ãRequestã¯ã©ã¹ãšResponseã¯ã©ã¹ãå¥ã ã®ãã¡ã€ã«ã«éžæããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ããžã®ãªã³ã¯ãä»ããŠæ¥ç¶ããããšã§ãã ãŸããNugetããServiceStack.Clientã¢ã»ã³ããªãã€ã³ã¹ããŒã«ããŸãã
次ã«ããã¿ã³ã¯ãªãã¯ã€ãã³ãã§ãã®ãããªãã³ãã©ãŒãåæãããšããŸãã
button.TouchUpInside += (object sender, EventArgs e) => { try { var client = new JsonServiceClient("http://127.0.0.1:8080"); HelloResponse response = client.Get<HelloResponse>(new HelloRequest() { Name = "iPhone" }); resultLabel.Text = response.Result; } catch (Exception ex) { resultLabel.Text = ex.Message; } };
ãã®åé¡ã¯ãä»åŸããã«è©³çŽ°ã«æ€èšããããšãã§ããŸãã
ã©ã€ã»ã³ã¹ã¯ã©ãã§ããïŒ
ããŒãžã§ã³4.0ããããã®ãããžã§ã¯ãã¯åçšã«ã©ãŒã«ãªããŸããã ãŸãããªããããè¯ããªãã®ã§ããïŒ ãã¬ãŒã ã¯ãŒã¯ã®ãœãŒã¹ã³ãŒãã¯ãŸã éããŠããŸããããã®ã©ã€ã»ã³ã¹ã§ã¯ã次ã®å¶éãããå°ããªãããžã§ã¯ãã«ã®ã¿ç¡æã§ãã¬ãŒã ã¯ãŒã¯ã䜿çšã§ããŸãã
- 10åã®æäœïŒã€ãŸãã10åã®DTOãªã¯ãšã¹ãïŒ
- OrmLiteã®10ããŒãã«
- JSONãJSVãããã³CSVã·ãªã¢ã©ã€ã¶ãŒãåãã20ã®ã¿ã€ã
- Redis Clientã®20ã®ã¿ã€ã
- Redisã®1æéããã6,000ãªã¯ãšã¹ã
ãŸãã倧äžå€«ãåäžã®Redisã§ã¯ãªããOrmLiteãé€ããŠä»ã®ORMããããŸããããã¡ãã10ã®æäœã¯ãã§ã«é倧ãªå¶éã§ãã
ã©ã€ã»ã³ã¹ãšäŸ¡æ Œã®è©³çŽ°ã«ã€ããŠã¯ã ãã®ããŒãžãã芧ãã ãã ã
çŸæç¹ã§ã¯ãBSDã©ã€ã»ã³ã¹ã®äžã§å©çšå¯èœãªãããžã§ã¯ãã§3çªç®ã®ããŒãžã§ã³ã䜿çšããŠããã4çªç®ãžã®ç§»è¡ã®ã¿ãæ€èšããŠããŸãã ãå¶å©ç®çãã«æ¥ç¶ããããªãå Žåã¯ã3çªç®ã®ãã©ã³ããå®å šã«äœ¿çšããŠãããžã§ã¯ãã§äœ¿çšã§ããŸããããã¯éåžžã«æçããŠããŠå®å®ããŠããŸãã
åç §ãšè泚
PROSAK ïŒããŒã«ã®èª¬æèŸæžïŒmã ãããª çŽ¡çžŸå·¥å Ž; ãã€ã¹ããããŒããçµã³ç®ããŒããã«ãããŒããåŒã£åŒµããŸãã || *äœããã¹ããããããªãèŠå¢ã 圌ã¯ãã¡ããã¡ãã«ãªã£ãã圌ã¯ãã¡ããã¡ãã«åº§ã£ãŠããŸãã ProsakïŒãããããïŒïŒãå転ãã€ãŒã«ãããããŸã§ã®ã¹ããŒã¹ãããã§ãæšåããããã§å転ãããªããäžéããŸãã 髪ã®æ¯ã§æã®ç«¯ã§ããã«çããšãããªãã¯ãããã²ãããå€ã«åºãŸããã ãã®ããšããããã
ããããçå£ã«ãããã«ãããŸãïŒ
å ¬åŒãµã€ã
servicestack.net
Wiki
github.com/ServiceStack/ServiceStack/wiki
ServiceStackã«é¢ããDemis Bellotãã¬ãŒã³ããŒã·ã§ã³ã®ã¹ã©ã€ãã·ã§ãŒ
www.slideshare.net/newmovie
äœæ¥äžã®ãããžã§ã¯ãã®äŸïŒã³ãŒãã¯GitHubã§å ¬éãããŠãããå©çšå¯èœã§ãïŒ
ã¢ããã°ç»å
imgur.servicestack.net
RestMovies
mono.servicestack.net/ServiceStack.MovieRest
ã¢ããã°StackOverflow
mono.servicestack.net/RedisStackOverflow
ãã®ããŒãžã«ã¯ä»ã®å€ãã®äŸãšãgithubã®ãœãŒã¹ããããŸãã
芪æãªãèªè ã®çãããèå³ãæã¡ãããã«åŠã³ãããšæã£ãŠãããªãããããèšãã ãã§ãç§ãã¡ã¯å ±åã®åªåã«ããããã®ãããã¯ãåãã§éçºããé瀺ããŠãããŸãã