有许多情景当你的REST api提供的相应是非常长的,并且我们都知道传递速度和贷款在移动设备/网络上是多重要。当开发支持REST apis的移动app的时候,我认为首要的性能最优化的点就是需要解决。猜猜是什么?因为响应式文本,因此我们能压缩这些文本。而且随着当前的只能手机和平板的能力,在客户端解压文本应该不是个大问题因此在这篇文章中,如果你使用java的Jersey构建它,我将介绍你怎么能有选择性的压缩REST API响应,这个Jersey事JAX-RS的映射实现(还有更多)
1Jersey过滤器和拦截器
啊,感谢Jersey的强大的过滤器和拦截器特性,这个实现是相当容易的。然后过滤器是主要打算来维护像HTTP headers,URIs和/或HTTP methods的request和response的参数,拦截器是维护实体,通过维护实体的输入/输出流。
但是对于压缩将使用一个GZip WriterInterceptor,一个写拦截器被用于这种情况,在那个类里,实体被写到"wire",当在这种情况中时,它在服务器这边,这就意味着输出一个响应实体。
11GZip Writer Interceptor
那让我们来看看我们的GZip Writer Interceptor吧:
GZip Writer Interceptor
package orgcodingpediademorestinterceptors;
import javaioIOException;
import javaioOutputStream;
import javautilzipGZIPOutputStream;
import javaxwsrsWebApplicationException;
import javaxwsrscoreMultivaluedMap;
import javaxwsrsextWriterInterceptor;
import javaxwsrsextWriterInterceptorContext;
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context)
throws IOException, WebApplicationException {
MultivaluedMap<String,Object> headers = contextgetHeaders();
headersadd("Content-Encoding", "gzip");
final OutputStream outputStream = contextgetOutputStream();
contextsetOutputStream(new GZIPOutputStream(outputStream));
contextproceed();
}
}
注意:
它实现了WriterInterceptor,这是一个写拦截器的消息体的接口,这个接口包装调用javaxwsrsextMessageBodyWriterwriteTo
供应商实现WriterInterceptor协议必须要么以编程方式注册进一个JAX-RS运行环境,要么必须用@Provider注解来注解在一个提供商扫描语句期间自动的被JAX-RS运行环境发现。
@Compress是绑定注解的名称,在接下来的段落中我们将更详细的讨论它
“拦截器从WriterInterceptorContext中获得一个输出流并且设置一个新的用原始的GZIP包装器包装的输出流。在所有的拦截器被执行以后,输出流最终设置WriterInterceptorContext将用于序列化实体。在上面的例子中,实体字节将被写到GZIPOutputStream中,这个类将压缩流数据,然后把他们写到原始输出流。原始流总是把数据写到wire中。当拦截器被用在服务器上时,原始输出流会把数据写到底层服务器容器的流中,然后发送响应给客户端。”
“重载方法aroundWriteTo()获取WriterInterceptorContextz作为参数。这个上下文包括请求头参数getters和setters,请求属性,实体,实体流和其它属性;当你压缩你的响应时,你应当设置'Content-Encoding'头位gzip”
12 压缩注解
过滤器和拦截器能被绑定名字。名称绑定是一种概念,这种概念就是允许告诉一个JAX-RS的运行时,一个只为特定资源方法的特定的过滤器或者拦截器将被执行。当一个过滤器或者拦截器只对一些特定的资源方法限制,那我们就认为它是名称绑定。过滤器和拦截器没有这样的限制就被称作global。在我们的例子中我们已经构建了@Compress注解:
Compress annotation
package orgcodingpediademorestinterceptors;
import javalangannotationRetention;
import javalangannotationRetentionPolicy;
import javaxwsrsNameBinding;
//@Compress annotation is the name binding annotation
@NameBinding
@Retention(RetentionPolicyRUNTIME)
public @interface Compress {}
而且用它来标记在资源上的方法,这个方法应该是被压缩的(eg:当GET-ing的时候,所有的博客用PodcastsResource)
@Compress annotation在资源方法上的使用
@Component
@Path("/podcasts")
public class PodcastsResource {
@Autowired
private PodcastService podcastService;
/
READ
/
/
Returns all resources (podcasts) from the database
@return
@throws IOException
@throws JsonMappingException
@throws JsonGenerationException
@throws AppException
/
@GET
@Compress
@Produces({ MediaTypeAPPLICATION_JSON, MediaTypeAPPLICATION_XML })
public List<Podcast> getPodcasts(
@QueryParam("orderByInsertionDate") String orderByInsertionDate,
@QueryParam("numberDaysToLookBack") Integer numberDaysToLookBack)
throws IOException,AppException {
List<Podcast> podcasts = podcastServicegetPodcasts(
orderByInsertionDate, numberDaysToLookBack);
return podcasts;
}
}
2测试
21SOAPui
好了,如果你正在用SOAPui测试,你能使用下面的请求违反PodcastsResource
Reqest:
请求例子:
GET http://localhost:8888/demo-rest-jersey-spring/podcasts/orderByInsertionDate=DESC HTTP/11
Accept-Encoding: gzip,deflate
Accept: application/json, application/xml
Host: localhost:8888
Connection: Keep-Alive
User-Agent: Apache-HttpClient/411 (java 15)
Response:
被压缩的json响应,通过SOAPui自动的解压缩
HTTP/11 200 OK
Content-Type: application/json
Content-Encoding: gzip
Content-Length: 409
Server: Jetty(907v20131107)
[
{
"id": 2,
"title": "Quarks & Co - zum Mitnehmen",
"linkOnPodcastpedia": "http://wwwpodcastpediaorg/quarks",
"feed": "http://podcastwdrde/quarksxml",
"description": "Quarks & Co: Das Wissenschaftsmagazin",
"insertionDate": "2014-10-29T10:46:1300+0100"
},
{
"id": 1,
"title": "- The Naked Scientists Podcast - Stripping Down Science",
"linkOnPodcastpedia": "http://wwwpodcastpediaorg/podcasts/792/-The-Naked-Scientists-Podcast-Stripping-Down-Science",
"feed": "feed_placeholder",
"description": "The Naked Scientists flagship science show brings you a lighthearted look at the latest scientific breakthroughs, interviews with the world top scientists, answers to your science questions and science experiments to try at home",
"insertionDate": "2014-10-29T10:46:0200+0100"
}
]
SOAPui接受Content-type:gzip头,我们在GZIPWriterIntercepter中添加了并且自动的解压了响应并且用人眼可读的方式展示出来。
好了,就这些了。你已经了解了Jersey如何让它直接压缩REST api响应了。
OCB OCEAN FRT BOX 海运费
CYC CY HANDLING CHARGE 日本港口操作附加费
IAC Intermodel Administrative Charge 多式联运附加费
SPS Shanghai Port Surcharge 上海港附加费
YAS Yen Applica surcharge 日元货币附加费
ACC ALAMEDA CORRIDOR 绿色通道费
CAF Currency Adjustment Factor or Devaluation Surcharge 币值调整费
CUC Chassis Usage 托盘使用费
DDC DEST DELIVERY CHARGE
EBS Emergent Bunker Surcharge 紧急燃油附加费
EMS Emergency Surcharge(near the war field) 紧急战争附加费
ERS EQUIP REST SURCH 空箱调运费
FSC Fuel Surcharge 燃油附加费
GRI GEN RATE INCREASE 运费普遍增长 CongestioN
LLO Lift on / Lift off 上下车费
ODB OCB, DDC and BAF
ORC Original Receiving Charge 启运港接货费
OWS OVERWEIGHT SURCHAARGE 超重附加费
PCF Panama Canal Fee 巴拿马运河费
PCS Port Congestion Surcharge 港口拥挤费
PSC Port Service Charge 港口服务费
PSS Peak season surcharge 旺季附加费
SCF Suez Canal Fee 苏伊士运河费
SPS Shanghai Port Surcharge 上海港附加费
BAF Bunkering Adjustment Fee 燃油附加费
CFS CFS Charge 集装箱场站费用
COD Charge of Diversion 转港费
DHC Dest Terminal Handling Charge 目的港港口附加费
DIB Destination Inland (Box) 目的港内陆附加费
EFS Emergency Fuel Surcharge 燃油附加费
IMO IMCO additional 危险品附加费
LHC Loading port Terminal Handling Charge 装港港口附加费
OIB Original Inland (Box) 启运港内陆附加费
WRS War Risk Surcharge 战争风险附加费
Suez Canal Surcharge 苏伊士运河附加费
Transhipment Surcharge 转船附加费
Direct Additional 直航附加费
Port Surcharge 港口附加费
Port Congestion Surcharge 港口拥挤附加费
Heavy-Lift Additional 超重附加费
Long Length Additional 超长附加费
Cleaning Charge 洗舱费
Fumigation Charge 熏蒸费
Ice Surcharge 冰冻附加费
Optional Fees or Optional Additional 选择卸货港附加费
Alteration Charge 变更卸货港附加费
Deviation Surcharge 绕航附加费
又到了为小伙伴们解惑的时候了 (❦ω❦),break非正式用词,指突然的或短时间的中止,如工作或活动期间短暂休息。rest指统称的休息。这里就给大家总结了一个它们基础知识的表格,可以先简单了解一下先:
了解完break和rest的基础知识后,现在就来看看它们的具体区别~(@^_^@)~
1、休息的性质不同
Break 可以是一个相对较短的时间段,例如在工作或学习之间需要短暂的休息。而 rest 则可能是一个更加长时间的休息,通常带有一些消极性因素,例如需要恢复体力或者精神状态。
例句:
- I need a break from work, let's go out for lunch
(我需要休息一下,我们去吃午饭吧。)
- After a long day of hiking, I just want to rest
(经过一整天的远足,我只是想休息。)
2、休息的状态不同
Break 通常指停止一项活动并且换个事情做。而 rest 指的是放松身心状态并静态地享受时间。
例句:
- Let's take a break and play some games
(我们休息一下,打一些游戏吧。)
- I love to rest on weekends, just sit and read a book
(周末我喜欢休息,静静地读书。)
3、休息的目的不同
Break 的目的通常是暂停一项活动来缓解身体或者精神上的压力。而 rest 则通常是为了恢复身体的健康和精神状态。
例句:
- I think we should take a break from work and go for a walk
(我认为我们应该暂停工作,出去散步一下。)
- After a long journey, we need to rest and regain our energy
(经过一段长途旅行,我们需要休息并恢复体力。)
4、语气不同
Break 带有积极的、娱乐的语气。而 rest 则可能带有更为消极的语气,不一定表示高兴的状态。
例句:
- Let's take a break and play some games
(我们休息一下,打一些游戏吧。)
- I have been sick for a week and need to rest in bed
(我生病了一周了,需要躺在床上休息。)
5、必要性不同
Break 不是必须的,而 rest 可能需要从医生或者身体信号得到的指引和建议。
例句:
- I need a break from studying before I get back to work
(我需要在工作之前休息一下,否则我会学不进去。)
- My doctor advised me to rest after my surgery
(我的医生建议我在做手术后休息。)
比如现在你想得到天气的信息,因为你不能预测,所以要由气象局的服务器得到,而气象局的服务器可能是用Rest或者其他网络服务的应用框架构建的WebService,你只要像访问网站一下,发信息给服务器,服务器就可以返回相应的信息(这里的信息可能一般是json,xml的数据,你要使用还需要解析),使你的程序中也可以使用比较专业权威的数据,而传输方式可能是tcp或http等。Rest应用在服务器上,而http是应用在服务器与访问者之间,是客户端程序与服务器交换数据的方法,当然不一样了。
1、打开IdeaREST应用程序,确保您已登录并进入了需要测试的API项目。
2、在项目中选择要发起报文的API端点(endpoint)。端点通常位于API的文档中,表示API可接受的请求路径。
3、在API端点详情页面中,您可以看到该端点支持的请求方法(如GET、POST、PUT、DELETE等)。选择合适的请求方法,然后填写请求所需的参数(如果有)。
4、在填写参数后,点击屏幕下方的Send按钮来发起报文。IdeaREST将自动发送请求,并在请求完成后显示响应结果。
5、查看响应结果,检查API是否按照预期返回了正确的数据。如果需要,您可以继续与API进行交互,以测试其他端点或修改请求参数。
好学是好的,但要循序渐进,了解市场,货代中费用太多,常见的就不下五十种
还有很多费用是老操作也未必清楚,全部的概念太广泛
以下参考,可以借鉴
CYC CY HANDLING CHARGE 日本港口操作附加费
IAC Intermodel Administrative Charge 多式联运附加费
SPS Shanghai Port Surcharge 上海港附加费
YAS Yen Applica surcharge 日元货币附加费
ACC ALAMEDA CORRIDOR 绿色通道费
CAF Currency Adjustment Factor or Devaluation Surcharge 币值调整费
CUC Chassis Usage 托盘使用费
DDC DEST DELIVERY CHARGE
EBS Emergent Bunker Surcharge 紧急燃油附加费
EMS Emergency Surcharge(near the war field) 紧急战争附加费
ERS EQUIP REST SURCH 空箱调运费
FSC Fuel Surcharge 燃油附加费
GRI GEN RATE INCREASE 运费普遍增长 CongestioN
LLO Lift on / Lift off 上下车费
ODB OCB, DDC and BAF
ORC Original Receiving Charge 启运港接货费
OWS OVERWEIGHT SURCHAARGE 超重附加费
PCF Panama Canal Fee 巴拿马运河费
PCS Port Congestion Surcharge 港口拥挤费
PSC Port Service Charge 港口服务费
PSS Peak season surcharge 旺季附加费
SCF Suez Canal Fee 苏伊士运河费
SPS Shanghai Port Surcharge 上海港附加费
BAF Bunkering Adjustment Fee 燃油附加费
CFS CFS Charge 集装箱场站费用
COD Charge of Diversion 转港费
DHC Dest Terminal Handling Charge 目的港港口附加费
DIB ’ Destination Inland (Box) 目的港内陆附加费
EFS Emergency Fuel Surcharge 燃油附加费
IMO IMCO additional 危险品附加费
LHC Loading port Terminal Handling Charge 装港港口附加费
OIB Original Inland (Box) 启运港内陆附加费
WRS War Risk Surcharge 战争风险附加费
ISPS INTERNATIONAL SHIP AND PORT FACILITY SECURITY CHARGE 国际船舶和港口安全费用
Suez Canal Surcharge 苏伊士运河附加费
Transhipment Surcharge 转船附加费
Direct Additional 直航附加费
Port Surcharge 港口附加费
Port Congestion Surcharge 港口拥挤附加费
Heavy-Lift Additional 超重附加费
Long Length Additional 超长附加费
Cleaning Charge 洗舱费
Fumigation Charge 熏蒸费
Ice Surcharge 冰冻附加费
Optional Fees or Optional Additional 选择卸货港附加费
Alteration Charge 变更卸货港附加费
Deviation Surcharge 绕航附加费
ICD INLAND CONTAINER DEPOT 内陆集装箱装卸站
常用海运术语
ANERA:ASIA NORTH AMERICA EASTBUND RATE AGREEMENT
远东-北美越太平洋航线东向运费协定
A/W: ALL WATER 全水陆
APPLY TO CUSTOMS: 报关 ( DECLARATION==CLEAR FROM CUSTOMS)
ANTIDATED B/L: 倒签提单
AMS: AUTOMATED MANIFEST SYSTEM 美国24小时前提交载货清单规定
TWRA:TRANS PACIFIC WESTBOUND RATE AGREEMENT 泛太平洋西向运费同盟
BAF: BUNKER ADJUSTMENT FACTOR 燃油附加费
B/L: BILL OF LADING 提单
BAY PLAN: 配载图
CAF:CURRENCY ADJUSTMENT FACTOR 货币贬值附加费
CY: CONTAINER YARD 集装箱堆场
CFS:CONTAINER FREIGHT STATION 拼货拆装箱场所
COLLECT:到付
CARGO RECEIPT: 货物签收单
CUSTOMS BROKER: 报关行
COC:CARRIER’S OWNED CONTAINER 船东箱
CNTR NO: CONTAINER NO 柜号
CBM: CUBE METER 立方米
CUFT: CUBE FEET 立方材(乘以35315=CBM)
CLP: CONTAINER LOADING PLAN 集装箱装载图
DDC: DESTINATION DELIVERY CHARGE 目的港收货费用
DST: DOUBLE STACK TRAIN 双层火车运送
DOC: DOCUMENT FEE 文件费
DEMURRAGE CHAGE: 超期堆存费
DETENTION: 滞箱费
D/O: DELIVERY ORDER 提货单
DEVANNING: 拆柜(=UNSTUFFING)
DOCK RECEIPT: 场站货物收据
ETA:ESTIMATED TIME OF ARRIVAL 预计到达日
ETD: ESTIMATED TIME OF DEPARTURE 预计开航日
EBS: EMERGENCY BUNKER SURCHARGE 燃油附加费
ETC: ESTIMATED TIME OF CLOSING 结关日
EDI: ELECTRONIC DATA INTERCHANGE 电子数据转换
FEU: FORTY FOOT EQUIVALENT UNITS 40’尺柜简称
FAF: FUEL ADJUSTMENT FACTOR 燃油附加费
FLAT RACK: 平板货柜
FO: FREE OUT 船边交货
FIO: FREE IN & OUT 承运方式的一种,表示船公司不负责两边的装卸费
FCL: FULL CONTAINER CARGO LOAD 整柜
FAK: FREIGHT ALL KINDS 不分ITEM 计价
FMC: FEDERAL MARITIME COMMISSION 美国联邦海事委员会
FIATA: INT’L FEDERATION OF FORWARDING AGENTS ASSOCIATION 国际货运承揽联盟
GOH: GARMENT ON HANGER 吊衣柜
GRI: GENERAL RATE INCREASE 一般运费调高
GULF PORT: 指美国靠墨西哥湾之港口
HAFFA: 香港货运物流业协会 HONGKONG ASSOCIATION FREIGHT FORWARDING AND LOGISTICS LTD
H/C: HANDLING CHARGE 手续费
HQ: HIGH CUBE 高柜
IPI: INTERIOR POINT INTERMODAL 美国内陆公共运输点
IA: INDEPENDENT ACTION 运费同盟会员采取的一致措施
IATA: INT’L AIR TRANSPORT ASSOCIATION 国际航空运输协会
LCL: LESS THAN CONTAINER CARGO LOAD 拼箱货
L/L: LOADING LIST 装船清单
L/C: LETTER OF CREDIT 信用证
NVOCC: NON VESSEL OPERATING COMMON CARRIER 无船承运人
MLB: MINI LAND BRIDGE 美国大陆桥
MANIFEST: 舱单
MATE’S RECEIPT: 大副签收单
O/F: OCEAN FREIGHT 海运费
ORC: ORIGINAL RECEIVING CHARGE 原产地收货费
OCEAN B/L: 海运提单
OUT PORT CHARGE: 非基本港附加费
ON BOARD DATE: 装船日
PARTIAL SHIPMENT: 分批装运
PSS: PEAK SEASON SURCHARGE 旺季附加费
PCC/PCS: PANAMA CANEL CHARGE/SURCHARGE 巴拿马运河费
PCF: PORT CONSTRUCTION FEE 港口建设费
P/P: FREIGHT PREPAID 运费预付
PNW: PACIFIC NORTHWEST 远东至北美太平洋北部地区之航线简称
PSW: PACIFIC SOUTHWEST 远东至北美太平洋南部地区之航线简称
PORT SURCHARGE: 港口附加费
POA: PLACE OF ACCEPTANCE 收货地
POL: PLACE OF LOADING 装货地、起运港
POD: PLACE OF DISCHARGE 卸货地
PTI: PRE-TRIP INSPECTION 冻柜检测参数
RIPI-REVERSE IPI : 由大西洋港口进入内陆
R/T: REVENUE TON 计费单位
RRS:RATE RESTORATION SURCHARGE 运价调整
SOC: SHIPPER’S OWNED CONTAINER 自备箱
S/O: SHIPPING ORDER 订舱单
SEAL NO: 铅封号
SEAWAY BILL: 随船提单
STORAGE: 仓储费
STUFFING: 装柜
SHIPPING ADVICE: 装船通知书
S/C: SERVICE CONTRACT 运送契约
TEU: TWENTY FOOT EQUIVALENT UNITS 20尺柜简称
THC: TERMINAL HANDLING CHARGE 码头费
USWC: UNITED STATE WEST COAST 美国太平洋西岸之港口
USEC: UNITED STATE EAST COAST 美国太平洋东岸之港口
VSL/VOY: VESSEL/VOYAGE船名航次
YAS: YEN ADJUSTMENT SURCHARGE 日元贬值附加费
欢迎分享,转载请注明来源:品搜搜测评网