内容简介:本篇文章是一篇软文,我想向大家推荐一下Spark —— 用于Kotlin和Java 8以最低消耗创建Web应用程序的微框架。快速开始:
本篇文章是一篇软文,我想向大家推荐一下 spark-java
这个框架,这里的 spark
并非是大数据相关的 apache-spark
,而是一个创建Web应用程序的微框架。以下我会简单的给大家介绍一下。
1. Spark简介
Spark —— 用于Kotlin和 Java 8以最低消耗创建Web应用程序的微框架。
快速开始:
Java:
import static spark.Spark.*; public class HelloWorld { public static void main(String[] args) { get("/hello", (req, res) -> "Hello World"); } } 复制代码
Kotlin
import spark.kotlin.* fun main(args: Array<String>) { val http: Http = ignite() http.get("/hello") { "Hello Spark Kotlin!" } } 复制代码
运行查看:
http://localhost:4567/hello 复制代码
为生产效率而生
Spark Framework是一个简单而富有表现力的Java/Kotlin Web框架,是为快速开发而构建的DSL(领域专用语言,domain specific language / DSL)。Spark的目的是为Kotlin/Java开发人员提供一种替代方案,以便开发他们的web应用程序时,尽可能有表达更多的内容和使用最少的样板。 凭借明确的理念,Spark的设计不仅让你的工作更富有成效,而且可以在Spark的流畅性,声明性以及丰富表达式的影响下,让你的代码更好。
你可以充分利用JVM
JVM提供了世界上最大的编程生态系统之一。虽然它有很多Java的web框架,但是纯Java的web开发传统意义上都是非常麻烦的。若你热爱JVM,但是憎恨累赘的代码和框架,那么Spark就是你专属的web框架。它可以几分钟内启动并运行,而且你可以在Groovy或者Kotlin或者其他任何你使用的语言中使用。 Spark是一个有着丰富表达的,轻量级且开放的纯Java(和Kotlin)web框架,与其他框架不同,你可以按你所想构建应用程序。
微服务,到处都是微服务!!!
2015年是微服务爆火的一年,现在你若开始研究微服务,你会意识到Spark对于微服务非常棒。微服务在微框架下运行得最好,而且Spark可以用少于十行代码构建你的REST API服务于JSON。 虽说Spark主要用于创建REST API,但它也支持多种模板引擎。为何不为你的后端创建一个Spark应用程序,并且为你的前端创建一个呢?
NodeJS开发者?用TypeScript?试试Spark替代吧!
后来,很多服务端的web开发已被NodeJS接管,但越来越多的NodeJS开发人员正使用TypeScript以及其他编译为JavaScript的静态类型语言。为什么不完全一致呢,去使用实际上是用类型设计的,且打算在服务器端运行的语言? 你还可以获得在JVM上运行应用程序的所有好处,其中类库亦不会天天被弃用。 如果你转自ExpressJS,那么对于Spark的语法将会非常熟悉,并且与许多JavaScript web框架不同,Spark在未来并不会过时。
典型用途
我们的2015年调查告诉我们,超过50%的Spark用户使用Spark创建REST API,而大约25%使用Spark创建网站。大约15%的Spark应用程序每天服务于超过10,000个用户。点击此处阅读完整调查。
2. 代码示例
Getting started
当前版本为2.9.0,更多版本可以参见 releases
compile group: 'com.sparkjava', name: 'spark-core', version: '2.9.0'
public class com.SparkJavaApplication { public static void main(String[] args) { get("/hello", (req, res) -> "Hello World"); } } 复制代码
更多例子
public class com.SparkJavaApplication { public static void main(String[] args) { port(4567); get("/hello", (req, res) -> "Hello World"); get("/users/:name", (request, response) -> "Selected user: " + request.params(":name")); get("/news/:section", (request, response) -> { response.type("text/xml"); return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><news>" + request.params("section") + "</news>"; }); get("/protected", (request, response) -> { halt(403, "I don't think so!!!"); return null; }); get("/redirect", (request, response) -> { response.redirect("/news/world"); return null; }); get("/", (request, response) -> "root"); get("/hello2", "application/json", (request, response) -> { return "{\"message\": \"Hello World\"}"; }); } } 复制代码
你可以使用port()函数定义开启的端口。
同时Spark参数的传递是以 :param
的形式传递的,获取方式同样是常用的request.params("paramName")。
在定义接口的时候还可以定义接口接收的类型,比如"application/json"。
此外,除了get方法,其他比如post、put等方法如下例所示:
public class Books { /** * Map holding the books */ public static Map<String, Book> books = new HashMap<>(); // Creates a new book resource, will return the ID to the created resource // author and title are sent as query parameters e.g. /books?author=Foo&title=Bar public static void main(String[] args) { post("/books", (request, response) -> { String author = request.queryParams("author"); String title = request.queryParams("title"); Book book = new Book(author, title); Random random = new Random(); int id = random.nextInt(Integer.MAX_VALUE); books.put(String.valueOf(id), book); response.status(201); // 201 Created return id; }); // Gets the book resource for the provided id get("/books/:id", (request, response) -> { Book book = books.get(request.params(":id")); if (book != null) { return "Title: " + book.getTitle() + ", Author: " + book.getAuthor(); } else { response.status(404); // 404 Not found return "Book not found"; } }); // Updates the book resource for the provided id with new information // author and title are sent as query parameters e.g. /books/<id>?author=Foo&title=Bar put("/books/:id", (request, response) -> { String id = request.params(":id"); Book book = books.get(id); if (book != null) { String newAuthor = request.queryParams("author"); String newTitle = request.queryParams("title"); if (newAuthor != null) { book.setAuthor(newAuthor); } if (newTitle != null) { book.setTitle(newTitle); } return "Book with id '" + id + "' updated"; } else { response.status(404); // 404 Not found return "Book not found"; } }); // Deletes the book resource for the provided id delete("/books/:id", (request, response) -> { String id = request.params(":id"); Book book = books.remove(id); if (book != null) { return "Book with id '" + id + "' deleted"; } else { response.status(404); // 404 Not found return "Book not found"; } }); // Gets all available book resources (id's) get("/books", (request, response) -> { StringBuilder ids = new StringBuilder(); for (String id : books.keySet()) { ids.append(id).append(" "); } return ids.toString(); }); } } 复制代码
更多例子可以参考 github项目
总结
Spark 是一个非常轻量级的web框架,若你不需要那么多的功能,只是提供简单的web接口,那么Spark是个非常适合的选择。另外,Spark同样适用于微服务的架构,它的功能不止于此,若是有兴趣,可以自行探索。 本文只是一篇引子,为的是我不用再引用所占内存较大Spring的web的框架,项目启动速度飞升。
参考
- 我的demo: github.com/lq920320/sp…
- 官网:sparkjava.com/
- 官方文档: sparkjava.com/documentati…
- 项目地址: github.com/perwendel/s…
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 听说,加缓存能提高性能?
- 听说mysql还会选错索引
- 听说玩这些游戏能提升编程能力?
- 深度介绍:???? 你听说过原生 HTML 组件吗?
- 听说你出了本书,花了多少钱?
- 听说你在为天天写业务代码而烦恼?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python算法教程
[挪威] Magnus Lie Hetland 赫特兰 / 凌杰、陆禹淳、顾俊 / 人民邮电出版社 / 2016-1-1 / 69.00元
本书用Python语言来讲解算法的分析和设计。本书主要关注经典的算法,但同时会为读者理解基本算法问题和解决问题打下很好的基础。全书共11章。分别介绍了树、图、计数问题、归纳递归、遍历、分解合并、贪心算法、复杂依赖、Dijkstra算法、匹配切割问题以及困难问题及其稀释等内容。本书在每一章结束的时候均有练习题和参考资料,这为读者的自我检查以及进一步学习提供了较多的便利。在全书的最后,给出了练习题的提......一起来看看 《Python算法教程》 这本书的介绍吧!