传统的Web应用程序和RESTful API

如今,当我们构建Web应用程序时,将所有功能公开为RESTful API,然后自己使用它是一种最佳实践。 这通常与使用繁重的javascript的丰富前端配合使用,例如Angular / Ember / Backbone / React。

但是沉重的前端似乎不是一个很好的默认值–需要概念上沉重的javascript框架开销的应用程序实际上并不是绝大多数。 网络虽然复杂得多,但仍然不仅仅是单页应用程序。 更不用说,如果您正在编写静态类型的后端,则可能需要一个专用的javascript团队(不一定是个好主意,尤其是在小型公司/初创企业中),或者您必须在其中编写……不太令人愉快语言。 老实说,我的浏览器到处都在使用所有不必要JavaScript,但这是一个独立的故事。

让自己使用自己的RESTful API的另一种选择是拥有一个“ Web”模块,该模块调用您的“后端”模块。 这可能是一个好主意,尤其是在您拥有不同专业的不同团队的情况下,但是为了分离而引入如此多的通信开销似乎至少应该在操作前三思。 更不用说现实中的发布周期通常是捆绑在一起的,因为您需要付出额外的努力才能使“ Web”和“后端”保持适当的同步(“ Web”不请求“后端”尚未提供的服务,或者“后端”未提供“网络”不期望的修改后的响应模型)。

正如我对整体的辩护一样 ,我显然倾向于整体应用。 我不会重复另一篇文章,但是我的想法是,即使应用程序在单个运行时(例如JVM)中运行,也可以是模块化的。 有了您的“ Web”软件包,有了您的“服务”软件包,它们可以独立开发,甚至可以作为单独的(子)项目编译成一个可部署的工件。

因此,如果您想要一个传统的Web应用程序-请求/响应,一点点的ajax,但又没有繁琐的javascript幻想,也没有架构开销,并且仍然想将服务公开为RESTful API,该怎么办?

您的Web层-控制器,使用来自表单提交的请求参数并使用模板引擎呈现响应-通常与您的服务层通信。 因此,对于您的Web层,服务层只是一个API。 它通过JVM内部的方法调用来使用它。 但这不是使用服务层的唯一方法。 诸如Spring-MVC,Jersey等框架允许注释任何方法并将其作为RESTful服务公开。 通常,服务层不公开为Web组件,但可以公开。 因此–您通过方法调用使用了服务层API,其他所有人都通过HTTP使用了它。 相同的定义,相同的输出,相同的安全性。 而且,您不需要单独的传递层即可拥有RESTful API。

从理论上讲,这听起来不错。 在实践中,将方法变成端点的注释可能会带来问题-序列化/反序列化是否正常工作,标题是否正确处理,身份验证是否正确。 而且,如果仅在单个JVM中使用方法,您将不会知道这些方法不起作用。 是的,您会知道它们在业务逻辑方面可以正常工作,但是启用RESTful的部分可能有所不同。

这就是为什么您需要全面接受验收测试的原因。 诸如黄瓜/ JBehave之类的东西可以测试所有暴露的端点。 这样,您将确保RESTful方面和业务逻辑均正常运行。 无论如何,实际上实际上是应该存在的东西,因此没有开销。

另一个问题是您可能希望将API与主应用程序分开部署。 https://yoursite.com和https://api.yoursite.com。 您可能只希望在一个集群中运行API,而在另一个集群中运行您的应用程序。 没问题–您可以使用配置开关和应用程序简单地禁用“ Web”部分,并多次部署相同的工件。

我不得不承认我还没有尝试过这种方法,但是它看起来像是一种简单的方法,仍然可以正确覆盖所有用例。

翻译自: https://www.javacodegeeks.com/2016/09/traditional-web-apps-restful-apis.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

在本人的《C语言可变参数函数的实现方法》一文中,介绍了如何建立自己的可变参数函数。下面继续介绍可变参数函数的实现原理。在汇编语言程序设计中,详细介绍了子程序的实现思想:(1)子程序只是一段代码的起始地址;(2)调用子程序之前…

Log4j使用详解(log4j.XML格式)——整理

log4j.xml配置详解(原文地址) 首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址: http://logging.apache.org/log4j/1.2/download.html xml格式的log4j配置文件概述 xml格式的log4j配置文件需要使用org.apache…

SAS

options nosource; * 抑制SAS语句日志;options nosource2; * 抑制宏到日志文件的打印;options notes; * 抑制所有消息记录;你也可以三个一起用,如下:options nosource nosource2 notes; 下面的是连错误都不打印 option nonotes nomprint nosource nos…

[Swift]LeetCode39. 组合总和 | Combination Sum

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址&a…

eclipse 重构_Eclipse对类固醇的重构

eclipse 重构在上一篇有关常见Java违规的文章中 ,我列出了Java开发人员容易犯的一系列错误。 在重构Java项目以解决这些违规问题的同时,我广泛使用Eclipse的重构功能来快速更改代码。 下面是这种重构技术的汇编。 1.在块级语句周围添加花括号 用{curly …

python中能够处理的最大整数是_实例讲解Python中整数的最大值输出

在Python中可以存储很大的值,如下面的Python示例程序:x 10000000000000000000000000000000000000000000;x x 1print (x)输出:10000000000000000000000000000000000000000001在Python中,整数的值不受位数的限制,可以…

SAS宏保存以便快速调用的三种解决方案(转载)

1.方式一:%include %include "full_path\sortds.txt"; inserts any code in the file called sortds.txt into your program at the location of the %include statement. Using this method, the macro must be recompiled every time a %INCLUDE is exe…

log4j.properties log4j.xml 路径问题

自动加载配置文件: (1)如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找source folder下的log4j.xml配置文件,若没有,会寻找log4j.properties文件。然后加…

webpack4+react多页面架构

webpack在单页面打包上应用广泛,以create-react-app为首的脚手架众多,单页面打包通常是将业务js,css打包到同一个html文件中,整个项目只有一个html文件入口,但也有许多业务需要多个页面不同的入口,比如不同的h5活动&am…

Spring安全性和密码编码

在以前的文章中,我们深入探讨了Spring安全性。 我们实现了由jdbc支持的安全性,基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息。 通过足够小心,我们会发现密码为纯文本格式。 尽管这在实际环境中可以很好地用于示例目的&…

SAS宏技术中,%let和call symput有什么区别?

平时经常使用的宏变量定义方法有三种: 1. %let xxxyyy; 2. Call Symput(xxx,yyy); 3. select xxx into: yyy. 三种定义方式最大的区别是在MACRO函数内定义所生成的宏变量的类型不同: Call Symput在宏函数中定义的宏变量可以在函数外调用;而%…

阿里巴巴的开源项目Druid(关于数据库连接)

原文地址:http://www.iteye.com/magazines/90文章简介 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQLParser。Druid支持所有JDBC兼容的数据库&a…

springcloud服务注册和发现

微服务架构中,服务发现组件是一个非常关键的组件,服务消费者、服务提供者、服务发现组件的关系大致如下: 各个微服务启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息服务消费者可从服务…

sas infile和filename

3.1 追加原始文件 原始数据可以使用以下的方法进行纵合并。INFILE语句 FILENAME语句 FILEVAR选项 操作系统自身的技术 首先,你可能要察看原始数据。可以用FSLIST过程。 语法: PROC FSLIST FILE file-specification; RUN; 实际使用中,专门的编…

Java 多线程(六) synchronized关键字详解

多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。 同步机制可以使用synchronized关键字实现。 当synchronized关键字修饰一个方法的时候,该方法叫做同…

java自动化_作为测试工程师进阶自动化选Java还是Python?

这是很多测试工程师从功能跨入自动化纠结的问题,今天本文带大家一探究竟。Java和Python一直都是两种很火的语言,用Python的一定觉得Python好,用Java的只觉得Java好。Java语言 VS Python语言Java自动化方法 VS Python自动化方法综上所述&…

Spring –添加Spring MVC –第2部分

在上一部分中,我们为经理和员工实现了控制器。 既然我们知道了自己的出路,我们将做很少(但仅做很少)更复杂的事情-任务和时间表的控制器。 因此,让我们从org.timesheet.web开始。 TaskController 。 首先创建一个类&am…

CALL SYMPUT与CALL SYMPUTX区别

call symput 在data步中将值塞入宏变量http://www2.sas.com/proceedings/sugi29/052-29.pdf [SAS] CALL SYMPUT与CALL SYMPUTX CALL SYMPUT的功能是可以在DATA step内将值塞到一个macro变量里面。如果这个macro变量已经存在,那这个call就会更新该macro变量的值。 CA…

Linux基本结构

一个完整地Linux操作系统由4部分组成,即内核(Kernel)、外壳(Shell)、实用程序(Utilities)和应用程序(Applications)。 (1)内核是Linux的心脏&…

jmeter使用_jmeter工具的使用

1.本地下载到官网,5.3版本的对应的是jdk8版本,就用这个了2.解压进入bin目录,找到jmeter.bat启动它,会弹出两个窗口,一个是启动窗口,使用jmeter不可以关了它,另一个是jmeter的工作界面进入界面默…