[Swift][Server-Side] Các tính năng và lợi ích của những Framework dùng để viết server nổi bật nhất cho đến thời điểm hiện tại

Từ khi Apple giới thiệu Swift dưới dạng mã nguồn mở cùng với sự cải tiến không ngừng thì nó càng ngày càng được cộng đồng đón nhận rộng rãi, cùng với đó cũng có nhiều framwork ra đời dựa trên swift nhằm việc phát trển Server-side. Cho đến hiện tại đã có khá nhiều framework rồi, không như thời đâu ta chỉ biết tới Perfect như 1 người đi tiên phong. Với các framework tôi liệt kê dưới đây nó điều có những điểm mạnh mà yếu khác nhau, tốt hơn hết với người mới bắt đầu bạn có thể thử dùng qua tất cả và tìm ra 1 framework phù hợp nhất đối với bạn, thực tế mà nói thì khi bạn chọn 1 framework để sử dụng thì đừng nên cho tốc độ là yếu tố quyết định hàng đâu, cũng vậy, đừng đặt 1 yếu tố rồi lấy đó là tiêu chuẩn, mà hãy dựa vào các yếu tố khác nhau sao cho phù hợp với mục đính và cách tiếp cận của bạn.

Vậy thì top server-side hiện tại là gì? Trong khuôn khổ bài viết này tôi sẽ đề cập đến Vapor, Perfect, Kitura, và Zewo. Trong các thứ đó mỗi thứ có 1 chút khác biệt, với vai trò là người đã sự dụng tất cả các framework trên, Tôi hy vọng sẽ giúp bạn có các nhìn sâu sắc ở đây. Tôi đã liệt kê chúng theo thứ tự của số lượng các tính năng từ nhỏ đến lớn.

Nếu bạn đang đọc bài viết này thì nên lưu ý rằng thông tin được tác giả tổng hợp cho đến tháng 3 năm 2017, hiện tại là tháng 11 rồi theo như tình hình hiện tại thì các framework trên vẫn nằm trong top, nên các bạn chú ý các framework mới ra nhé.

Hãy bắt đầu với Zewo

Zewo lấy cảm hứng từ Go, và cố gắng sử dụng đồng thời cả Go-style và tránh sử dụng các callback. Nó được cấp phép với giấy phép mã nguồn mở MIT và được duy trì trên GitHub bởi các cá nhân tư nhân (theo như thông tin tôi biết). Zewo chắc chắn là đủ nhanh để sử dụng và có tất cả các tính năng cơ bản bạn có thể mong đợi từ một framework server-side. Điều này bao gồm những thứ cơ bản như HTTP request/response, url routing, TLS (SSL), Websockets, templating (moustache) và (JSON / XML). Nó cũng cho phép sử dụng middleware (Filters).

Zewo có hỗ trợ Turnstile authentication framework (https://github.com/stormpath/Turnstile) cùng với login và session, cũng đồng thời hỗ trợ cả JSON Web Tokens qua 1 package riêng của nó. Zewo cũng có sẵn các connector cho MySQL, PostgreSQL, Redis, và RethinkDB, kèm với đó cũng có ORM(Object Relational Mapping) dùng với Postgre.

Làm sao để triển khai Zewo, bạn có thể triển khai qua Docker, nó hỗ trợ tất cả các Swift platform (mac or Ubuntu) Về tài liệu của Rewo, thì đang khá là hạn chế chưa có các ví dụ mang tính chất chuyên sâu tính đến tháng 3 năm 2017

Nơi nào Zewo toả sáng

Nếu bạn đang tìm kiếm 1 phong cách giống Go, tránh việc sử dụng callback, thì Zewo chính là sự lựa chọn của bạn. Mặc dù khá nhanh nhưng không hẳn là nhanh nhất có thể, một số nhà phát trển nếu thích cách tiếp cận của Go-style thì đây cũng là điều khá phù hợp với họ, Zewo cũng có 1 ví dụ về GraphQL đang hoạn động, nhưng rõ ràng nó không phải là framework duy nhất hỗ trợ, vì Graph vỗn là 1 gói từ bên thứ 3 bản thân nó tự hoạt động. Những gì Zewo có là bao gồn chính nó và các gói Lua Script, do đó Zewo rất hữu ích cho các dự án yêu cầu chạy Lua, kết nối RethinkDB, ZeroMQ.

Khi nào thì ít tận dùng được thế mạnh:

Cộng đồng của Zewo không phải là lớn mạnh so với các framework khác được nói đến trong bài viết này, vì thế nếu bạn cần hỗ trợ cũng gặp nhiều khó khăn hơn, nó khá là ít tài liệu, nếu muốn tìm hiểu sâu thì bạn nên vào nhóm slack của họ và hỏi thật nhiệt tình, nhưng thực tế trên đó cũng có khá ít ví dụ mẫu, cộng đồng nhỏ là 1 trở ngại với framework này.

Tóm tắt về Zewo:

Như đã nói ở trên, nếu bạn sử dụng Go-style để xử lý concurrency và không sử dụng callback, bạn có chạy với Lua, kết nối RethinkDB thì Zewo chính là sự lựa chọn, bạn cần phát triển nhanh, nhiều ví dụ mẫu thì có vẻ không được tốt lắm, nhưng đây cũng chính là cơ hội để bạn có thể đóng góp và cùng xây dựng cộng đồng Zewo ngày càng lớn mạnh

Tiếp theo là Kitura

Kitura được phát triển và hỗ trợ bởi IBM, và nó có thể được start từ năm 2014 khi IBM thiết lập mối quan hệ với Apple. Nó được cấp phép Apache 2.0

Khi dùng Kitura bạn sẽ tìm thấy toàn bộ tính năng chuẩn mà bạn có thể làm việc với server-side tương tự như Zewo đã nói ở trên, và nó cũng có thêm những tính năng nâng cao hơn, tuy nhiên khác biệt đáng chú ý là Kitura hiện đang khá hạn chế trong việc hỗ trợ cấu trúc dữ liệu khác ngoài JSON, ví dụ nếu bạn cần XML thì bạn sẽ phải tìm gói swift bên thứ 3 khác. Kitura cũng hỗ trợ Aphid MQTT (Internet Of thing/IoT Messaging)

Authentication wise, các dự án Kitura dựa vào Kitura-Credentials, Kitura có các bản build middleware cho các chuẩn như CORS và CSRF, cũng như hỗ trợ việc đăng nhập qua Google, Facebook, và Github, Native support for JSON Web Tokens chưa được implement

Về kết nối cơ sở dữ liệu thì cách làm của Kitura rất độc đáo, đối với các kiểu dữ liệu SQL, Kitura sử dụng lớp trừu tượng SQL Database có tên là Kuery (phát âm giống Query), kết hợp lại tạo ra 1 API duy nhất cho ngừoi dùng, cũng có hỗ trợ cả MySQL và PostgreDB, Kuery không pải là 1 ORM full, mà là 1 lớp trừu tượng để làm cho các truy vấn SQL trông gần gũi với ngôn ngữ swift hơn, KItura cũng hỗ trợ Redis, couchDB, Apache Cassandra, và ScyllaDB, nhưng thông qua các package riêng không liên quan đến Kuery.

Với Ktura thì có nhiều các template và tài liệu, ví dụ mẫu cho các nhà phát triển, ngoài ra nó còn tính hợp việc hỗ trợ cho FastGCI, cho phép streaming dữ liệu từ server hiện tại với Apache. Nói sâu hơn chút, thì nó hỗ trợ cả các kết nối tới API Watson.

Develop với Kitura, tất nhiên là nó sẽ tương thích hoàn toàn với môi trường Swift, ít nhất là MacOS và Ubuntu 14/16. Nhưng cũng có chút khác biệt, trên MacOS thì IBM cung cấp gói tích hợp trực tiếp vào nền tảng Bluemix (Bluemix là nền tảng trên đám mây của IBM, nó cho phép nhà phát triển phần mềm: thiết kế, phát triển, triển khai và theo dõi các ứng dụng Web và ứng dụng di động của mình trên đám mây một cách nhanh chóng) của họ, nếu bạn sử dụng hosting bluemix thì rõ ràng sẽ nhận được những lợi ích lớn

Nếu bắt đầu tìm hiểu về Kitura thì các tài liệu hiện có rất nhiều, trên website cũng có hướng dẫn đầy đủ, cũng như phân tích rõ ràng các chức năng trong API của họ, cùng với các hướng dẫn cho việc building, testing, & deploying.

Nơi mà Kitura toả sáng:

Như đã nói ở trên, rõ ràng là khi bạn sử dụng BlueMix, nói sâu hơn chút 1 số tính năng độc đáo như kết nối API của IBM Watson, Apache Cassandra, ScyllaDB, Stencil Templating, sẽ làm Kitura trở nên cần thiết cho bấn kỳ dự án nào yêu cầu những cái vừa liệt kê. Kitura sẽ lý tưởng cho dự án nào liên quan đến IBM service, như watson hay bluemix

Khi nào Kitura bị hạn chế

Xét về quy mô cộng đồng thì kitura cũng đứng thứ 3/4 trong cộng đồng Slack, mặc dù có lượng thành viên lớn hơn Zewo, nhưng nó không phải là hoạt động tích cực nhất, mặc dù trong đó có cả các thành viên của IBM và các member khác trên Slack. Nếu bạn muốn thao tác với cơ sở dữ liệu SQL với Kitura, bạn bị giới hạn bởi Kuery, và bạn sẽ sử dụng cú pháp của nó, nên sẽ tốn thời gian để học hỏi, nếu bạn muốn dùng Turnstile cho authentication bạn sẽ phải dùng đến cái khác, Kitura chỉ là 1 framework và nó không hỗ trợ Turnstile

Tóm lại về Kutura

Kitura đang phát triển rất tốt nhờ có sự hậu thuẫn của gã khổng lồ IBM. Cho nên nó sẽ còn tồn tại lâu dài, chắc chắn tốc độ cũng phát triển cũng khá tốt. Tuy nhiên họ không phải là 1 cộng đồng lớn, cho nên cũng không có những gói chức năng lớn, những cũng có những tính năng cơ bản đáp ứng được hầu hết các nhu cầu tương đối của các developer, bạn cũng cần có thời gian để làm quen với Kuery, Kutura sẽ là rất tốt nếu bạn dùng nó với những nền tảng mà IBM phát triển như Watson hay Bluemix.

Nhât vật tiếp theo tôi muốn nhắc đến là Vapor:

Có 2 điều mà bạn có thể nhắc tới ngay lập tức khi nói đến Vapor: đó là cộng động lớn hoạt động tích cực, điều nữa là nó có cú pháp khá là đơn giản để học và phát triển

Vapor cũng là framework tập trung vào việc viết thuần Swift, Vapor được phát triển bởi start-up Qutheory, LLC và sử dụng MIT License

Sự độc quyền của Swift làm cho vapor hơi khác chút so với lúc bắt đầu, thứ nhất nó hy sinh 1 chút tốc độ (vẫn phải lưu ý bạn đọc rằng tốc độ ở đây không phải là vấn đề quyết định). Nó rất thu hút bởi API rất dễ đọc dễ hiểu, cũng như loại bỏ được sự phụ thuộc vào bên thứ 3, khimà các framework khác có thể được chọn để implement từng thành phần ví dụ như HTTP Parser của Node.js, Vapor có trình Swift parser riêng. Điều này cho phép các nhà phát triển Vapor giữ API của họ ở mức đơn giản, dễ đọc và giữ các phương thức đúng chuẩn của Swift. Với Zewo niềm tự hào của nó là xử lý concurrency với Go-style, còn đối với Vapor chính là nó được viết riêng cho Swift.

Vapor có bộ core rất tuyệt vời, các tính năng phát triển bởi chính nó mà không nhờ vào bên thứ 3 nào. Các tính năng cơ bản mà không có trong 2 framework nói ở trên dó là XML, CSRF middleware và hỗ trợ FastCGI. Cùng với đó họ cũng mở rộng thêm các tính năng như Apple Push Notification và SMTP để gửi mail, 2 tính năng trên cũng rất hữu dụng.

Về Database Vapor cũng support 1 cách hoàn hảo, nó không chỉ là kết nối trực tiếp đến cơ sở dữ liệu như MySQL, SQLite và PostgeDB, nó còn trực tiếp hỗ trợ Redis và MongoDB. Ngoài ra nó cũng có Fluent ORM hỗ trợ cho SQLite, MySQL, PostgreSQL, và MongoDB. Tất cả đều là native swift nên đối với 1 người học swift thì nó rất dễ dàng để tiếp cận.

Turnstile là framework phổ biến dùng cho authentication trong swift server-side, cũng được tích hợp luôn vào Vapor, bạn không cần phải dùng nó như 1 framework của bên thứ 3, cũng có luôn thư viện mã hoá, giải mã, chứng thực, session, có trình xử lý ORM Fluent để lưu trữ database, hỗ trợ CORS.

Cộng đồng Vapor thì cực kỳ tích cực và làm việc rất chăm chỉ kể từ bản 1.0 cho tới 2.0.

Có thể kể ra 1 số tính năng độc quyền của Vapor, thứ nhất: hỗ trợ Moustache và Markdown, có template riêng. Hệ thống template được gọi là Leaf, các Leaf bắt nguồn từ Vapor, Các leaf được phát triển bằng swift và nó được thiết kế để có thể tương thích trực tiếp với Vapor.

Để triển khai Vapor, bạn có thể triển khai trên MacOS và Ubuntu 14/16, dùng công cụ Docker để hỗ trợ.

Tài nguyên nhiều và support tốt chính là đặc điểm nổi bật của Vapor, tài liệu được tổ chức tốt và dễ dàng sử dụng, mặc dù chưa hoàn toàn đầy đủ, thậm chí họ có có cả kho video có thể tìm thấy tại http://vapor.university. Và thậm chí họ còn phát triển tài liệu bằng tiếng Trung.

Nơi mà Vapor toả sáng

Vapor là framework có cú pháp rất rõ ràng và dễ hiểu, đồng thời cũng có cộng đồng lớn nhất, Điều này làm nó tuyệt vời với những người mới bắt đầu. Những người mới sẽ tận dùng được thế mạnh tài nguyên, cộng đồng tích cực và có giá trị lớn. Nếu bạn đang tìm framework để làm server-side only swift thì đây là sự lựa chọn duy nhất cho bạn. Còn những thứ khác bao gồm ít nhất 1 thư viện C, Vapor có cả validate system, push notification, nhiều protocols, SMTP, và support Database rất tốt.

Nơi mà Vapor không phát huy được thế mạnh

Nếu bạn quan tâm nhiều đến tốc độ thì có vẻ vapor không phù hợp vì nó đã phải hy sinh 1 chút tốc độ và hiệu năng, nhưng bạn cũng có thể cải thiện bằng cách đầu tư con server khủng, nhưng cũng đồng nghĩa với nó là chi phí sẽ tăng lên rất cao, với 1 khối lượng xử lý cực lớn thì tốc độ khác nhau đôi chút thôi cũng là cả 1 vấn đề. https://medium.com/@rymcol/current-features-benefits-of-the-top-server-side-swift-frameworks-b15b4f2d7bc3

Tóm tắt về Vapor

Vapor phù hợp với người mới bắt đầu và người đã có kinh nghiệm, những người thích sự rõ ràng đơn giản và rành mạch, Vapor có cộng đồng mạnh phát triển liên tục và hỗ trợ tốt, phù hợp cho các dự án cần phải clear và dễ đọc, dự án với 1 team đông người thì khá là phù hợp.

Cuối cùng là Perfect

Perfect thực sự là 1 framework rất to và là lâu đời nhất, nó cũng nhanh mạnh và rất nhiều tính năng. Nó được điều hành bởi 1 cty mới thành lập ở Canada, PerfectlySoft, bạn có thể tìm hiểu thêm thông tin về cty này ở Google. Perfect có liên hệ với Apple, đáng chú ý nhất là 1 số thành viên trong đội đến từ nhóm ngôn ngữ Lasso, trước từng làm tại Apple. Nhóm này đã phát triển các công nghệ máy chủ trong nhiều năm, và đã chọn Swift là hướng đi tiếp theo. Perfect được cấp phép Apache 2.0

Điều đầu tiên cần lưu ý là perfect có nhiều repo khác nhau, thực tế nó chu thành nhiều các nhánh trên Github như sau:

	https://github.com/PerfectlySoft Repo chính chứa framework và engine
	https://github.com/PerfectExamples chứa các ví dụ
	https://github.com/SwiftORM chứa StORM ORM and các kết nối cơ sở dữ liệu
	https://github.com/PerfectServers có chứa các ứng dụng hoàn chỉnh có thể deploy ngay lập tức.

phải chia ra như thế có lẽ vì thư viện khó quản lý mà cũng khó để tìm cách nào tốt hơn, hơn nữa còn có nguyên 1 đống ví dụ.

Perfect có tất cả các tính năng cơ bản mà bạn mong đợi như Routing, websockets, TSL (SSL), Logging, Mustache, Markdown, JSON, v.v... và những tính năng khác như XML, Apple Push notification, MQTT, SMTP, tính năng đáng chú ý duy nhất bị thiếu đó là "native route type validation", Perfect cũng không có công cụ command nào mặc dù có 1 ứng dụng native trên Mac.

Về cộng đồng thì nó cũng lớn và rất tích cực như Vapor, lớn thứ 2 trong bài viết này chỉ sau Vapor, nhưng nó cũng sẽ phát triển rất nhanh chóng.

Perfect hỗ trợ rất nhiều cơ sở dữ liệu. Hỗ trợ trực tiếp các database sử dụng SQL như MySQL, SQLite, PostgreSQL và MariaDB. Perfect cũng hỗ trợ MongoDB, Redis, CouchDB, và thậm chí FileMaker. Perfect cũng có một phần thực hiện ODBC của Microsoft đang được phát triển, đó là một loại low-API để truy cập vào nhiều kiểu cơ sở dữ liệu thông qua 1 Interface. Nói về ORM, như đã đề cập ở trên, Perfect có Storm ORM, hoàn chỉnh với các triển khai cho PostgreSQL, MySQL, CouchDB, Mongo, và SQLite.

Perfect hỗ trợ Turnstile, như Vapor đã nói ở trên, cũng có luôn thư viện hỗ trợ mã hoá và giải mã, hỗ trợ OAuth2 library, trong đó đã tích hợp luôn việc đăng nhập vào các mạng xã hội như Facebook, google, github, linkedIn, Slack... Cũng support basic Http Authentication. Cũng có thể custom implement session, cuối cùng nó cũng cung cấp gói phần mềm được viết cho CORS và CSRF.

Perfect cũng có khá nhiều tính năng độc đáo mà không có trong 3 cái đã liệt kê ở trên, có thể nói đến như có 1 wrapper cURL, cho phép sử dụng libcurl trong Perfect. Ngoài ra còn có thể tương tác sâu với các thứ mục, tệp tin, nén và giải nén. Cũng là framework duy nhất hỗ trợ MariaDB, ODBC, và FileMaker.

Đây là framwork có Document đầy đủ, có source có thể triển khai ngay lập tức, tức là chỉ cần tải về và chạy. Perfect cũng hỗ trợ riêng cho SPNEGO / Kerberos, LDAP, Active Directory và Big Data (GridFS / Hadoop, v.v ...).

Perfect có luôn 1 ứng dụng native gọi là Perfect Assistant để quản lý các dự án Perfect, Perfect Assistant được tích hợp với docker để test trên linux, cũng như AWS hay google cloud platform để triển khai các dự án tự động.

Perfect có rất nhiều tuỳ chọn để deploy. Cũng như các framework khác, nó tương thích với Mac OS, Ubuntu 14/16. Perfect triển khai qua docker, hỗ trợ kết nối FastCGI cho Apache và Heroku BuildPack. Deploy cũng có thể được quản lý tính cả AWS và google cloud Tools thông qua Perfect Assistant. Ngoài các tuỳ chọn deploy, perfect còn có 1 kho các ứng dụng đã phát triển sẵn sàng để sử dụng với cấu hình nhỏ như: SwiftSlack, a Swift port of Slackin, nó được làm ra để nhanh chóng thu hút người dùng mới tới đội Slack của bạn.

Hãy xem nơi mà Perfect toả sáng:

Perfect có bộ tính năng rất mạnh mẽ bao gồm nhiều thứ mà không ai khác có được, cũng cực nhiều ví dụ cụ thể đi đôi với những tính năng mà họ nêu ra. Điều đó làm perfect trở thành sự lựa chọn tốt cho xử lý những điều phức tạp. Nếu bạn đang tìm 1 framework làm việc chặt chẽ với những thứ như: cURL, Filemaker, Kerberos, Active Directory, BSON, Hadoop, GridFS, OAuth2, or ODBC thì đây là sự lựa chọn cho bạn. Tương tự như vậy, Perfect là framework duy nhất hỗ trợ trực tiếp MariaDB, thao tác trực tiếp với các thư mục, nén và giải nén,bbạn làm việc với những thứ đó thì không cần tìm ở bất cứ nơi nào khác, nó cũng là framework nhanh nhất trong những thứ tôi liệt kê ở đây.

Nơi perfect khó phát huy được tác dụng: Về cú pháp Perfect không phải dễ hay ngắn nhất, nó không thích hợp với những dev ít kinh nghiệm và xây dựng ứng dụng từ đầu. Với tốc độ là yếu tố tập trung hàng đầu thì nó cũng dẫn tới 1 số thứ khó hiểu và đòi hỏi có nhiều thời gian để tìm hiểu để có thể phát trển 1 cách tốt nhất, Perfect cũng không có kho video hay người hướng dẫn tập trung, các ý kiến đóng góp bởi nhiều người dùng khác nhau nên về mức độ tin cậy của thông tin thì không thể nào sánh với Vapor được.

Tổng quan về Perfect:

Nhiều tính năng và rất mạnh mẽ, lại nhanh nữa nên nó phù hợp với các dự án yêu cầu sự phức tạp cao, nhiều ví dụ, nhiều tài liệu, cộng đồng lớn là thế mạnh của Perfect Những ứng dụng thao tác tệp, nén, giải nén dùng perfect là rất phù hợp. Những dự án siêu lớn bạn phải lo lắng để tốc độ thì hãy dùng Perfect.

Tổng kết

Mặc dù tất cả các framework có xu hướng là các công việc tương tự nhau nhưng chúng rất khác nhau khi nói đến khả năng và nguồn lực của chúng, mỗi cái có những sự độc đáo riêng, với các bạn developer thì hãy tuỳ tình hình mà chọn lấy 1 cái mà dùng, tốt nhất hãy dùng qua tất cả và có những đánh giá riêng của bản thân và chọn ra thứ tốt nhất cho bạn.

Có 1 số tính năng mà chẳng cái nào có cả nên bạn phải dùng của bên thứ 3 tôi cũng sẽ liệt kê luôn cho các bạn nắm được, nếu cần dùng gì thì cứ lấy mà dùng.

	https://github.com/yaslab/CSV.swift (for working with CSV files)
	https://github.com/iamjono/SwiftString (a lot of convenient methods for working with strings)
	https://github.com/iamjono/SwiftRandom (easy ways to generate random things directly in the type you need them)
	https://github.com/stormpath/Turnstile (authentication)

Những vấn đề khúc mắc:

Nếu bạn thấy thích thú về Swift server-side, đi vào tìm hiểu và gặp các vấn đề cần được giải đáp tôi cũng có cung cấp cho bạn luôn nhưng link cần thiết dưới đây:

Zewo: Website | Github | Slack Kitura: Website | Github | Slack Vapor: Website | Github | Slack Perfect: Website | Github | Slack

Bài viết được tổng hợp từ https://medium.com/@rymcol/current-features-benefits-of-the-top-server-side-swift-frameworks-b15b4f2d7bc3 thanks tác giả vì đã cho cái nhìn khá toàn diện về Swift server-side bây giờ.


All Rights Reserved