首页 文章 精选 留言 我的

精选列表

搜索[搜索增强],共10005篇文章
优秀的个人博客,低调大师

PayPal 使用 TypeScript 类型定义增强 JavaScript SDK

电子支付平台PayPal 宣布已将 TypeScript 类型定义添加到其 JavaScript SDKpaypal-js npm 包中。 “你知道 PayPal 为我们的 JavaScript SDK 发布了类型定义吗?而且你甚至不需要使用 TypeScript 就能受益。它们作为 Paypal-js npm 包的一部分。在这篇文章中,我将介绍该包的内容,以及如何利用 TypeScript 定义来加快 PayPal 应用程序的开发,无论你是否用 TypeScript 编写代码。” npm install @paypal/paypal-js 根据介绍,该 paypal-js 模块可以轻松地异步加载 PayPal JavaScript SDK。它提供了一个 loadScript() 方法,将 SDK的<script> tag 注入页面,并返回一个 promise,该 promise 将在脚本加载成功后解析。使用此实用程序可以更轻松地在参数更改(例如货币更改)时处理错误和重新加载脚本等任务。 一个基本的用法示例: TypeScript Hints 只要在loadScript回调中键入Paypal ,TypeScript autocompletion 就会出现。TS 和 JS 文件都支持此功能,如下所示: TypeScript 能够展示可以传递给paypal.Buttons() 的所有选项,包括其返回类型。createOrder 选项可以接收一个 Record(一个标准的 JS 对象)的回调,其中有一个 string 作为 key,和一个未知值;以及一个 CreateOrderActions 对象作为其第二个参数。它将返回一个持有字符串值的 Promise,也就是 order ID。 如果缺少任何内容或输入不正确,IDE 将会用红色波浪线标出错误。 将鼠标悬停在文本上将提供有关缺少参数的详细信息,在createOrder方法上单击 cmd 将使开发者直接进入 TypeScript 定义。 选择附加功能 虽然 JS SDK 类型定义相当全面,但实际支持的方法取决于传递到 JavaScript SDK<script>tag的组件查询参数。默认情况下,Buttons是唯一受支持的方法。有关选择所需组件的更多详细信息,可参阅脚本配置指南。 没有 LoadScript 的 TypeScript 定义 loadScript() 方法并不是在应用程序中启用 TypeScript 定义的必要要求。如果你想避免将这种依赖性带入你的应用程序,可以使用 import type 语法而不是import。从而可在构建时获得所有 TypeScript 的好处,而不会增加包的大小。 从 paypal-js 模块 import 和 import type 时,都提供对 loadScript 模块和全局 window.paypal 变量的类型定义的访问。 进一步拥抱类型 为 PayPal JavaScript SDK 维护的所有类型都直接从 paypal-js 模块的根目录中导出,并且可以单独导入: 上图示例中,myIntent 变量和 postal_code 属性都输入错误,将显示类似于下面的错误: 有数十种与 PayPal 相关的类型,每种类型都有关于其属性和用途的大量文档,可以进一步帮助构建应用程序。 Paypal 开发者关系经理 Jamund Ferguson 总结称,“有了可用的类型提示,你在使用 PayPal JavaScript SDK 编写应用程序时会更有效率。你应该能够在不离开 IDE 的情况下完成更多工作,并且当你确实需要查看文档时,多数情况下你都可以在类型定义中找到所需的内容。其他情况下,则将提供指向给定方法的最佳文档的直接链接。无论你是否在应用程序中使用 TypeScript,都可以从这些新的类型定义中受益。”

优秀的个人博客,低调大师

Mozi.Network 1.4.2 发布,增强 Http 功能

Mozi.Network是基于.Net开发的网络应用组件套装。项目实现了几个常见的网络通讯协议。所有的模块在实现时均以应用场景为出发点进行开发,保证模块精巧,功能完备,调用简单,可扩展性强,且调用不破坏宿主程序的逻辑结构。 [新增] HttpEmbedded中新增断点续传 HttpEmbedded中增加API简易注册接口, 无需继承BaseApi即可实现接口 HttpEmbedded中增加Transfer-Encoding:chunked,分块传输

优秀的个人博客,低调大师

Torna Swagger 插件 1.2.3 发布,Swagger 增强利器

Torna Swagger插件 1.2.3 发布,本次更新内容如下: 修复ResponseEntity无泛型参数报NPE问题 支持枚举参数 最新版maven依赖: <!-- torna swagger 插件 --> <dependency> <groupId>cn.torna</groupId> <artifactId>swagger-plugin</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> → 演示地址 关于Torna Swagger插件 Torna配套的文档生成插件,可以把本地swagger文档信息推送到Torna平台,让平台统一管理。 让Torna管理文档的好处有: 项目不需要集成swagger-ui等组件,只需要依赖swagger注解即可 Torna提供了调试、Mock等功能,并且可以区分多环境调试(开发、测试、生产) 调试界面更友好,比swagger自带的UI更容易使用 可以自由组合文档,将不同项目的文档聚合在一起,然后分享出去 插件使用说明

优秀的个人博客,低调大师

撸了一个 Feign 增强包

前言 最近准备将公司的一个核心业务系统用 Java 进行重构,大半年没写 Java ,JDK 都更新到 14 了,考虑到稳定性等问题最终还是选择的 JDK11。 在整体架构选型时,由于是一个全新的系统,所以没有历史包袱,同时团队中也有多位大牛坐镇,因此我们的选项便大胆起来。 最终结果就是直接一把梭,直接上未来的大趋势:Service Mesh,直接把什么 SpringCloud、Dubbo 这类分布式框架全部干掉。 本次的重点不是讨论 Service Mesh 是什么、能解决什么问题、为什么选择它,毕竟我也在学习阶段,啥时候整明白线上也稳定了再和大家来交流。 问题 既然方向定了就开始实际撸码了,不过刚一开始就验证了”理想很丰满、现实很骨感“; 由于我们去掉了 SpringCloud 和 Dubbo 这类框架,服务的注册、发现、负载均衡等需求全部都下沉到 Service Mesh 中提供了。 但对于开发来说依然希望可以调用本地方法的方式来调用远程服务,这在 SpringCloud 这类框架中是很容易实现的,框架本身就有很好的支持。 回到我们这个场景,需求其实很简单,就是想达到 SpringCloud 中的 Feign 这样的声明式+注解的方式调用。 @Autowired private StoreClient client ; Store store = client.update(1, store) 使用 spring-cloud-openfeign 这个包其实就能实现上述的需求了,但这样会引入一些我们根本不会使用的 SpringCloud 的相关依赖,让人感觉”不干净了“;同时也和 Service Mesh 的理念相反,其中的一大目的就是要降低这类框架的侵入性。 其实 spring-cloud-openfeign 的核心就是 Feign,本身它也是可以开箱即用的,所以便尝试看 Feign 自己是否支持这样的用法。 通过官方文档可以得知:是可以定义接口的形式来调用远程接口的,但它本质上是不依赖其他库便可以使用,所以它本身是没有和 Spring 整合也是合情合理,但也就造成了没有现成库可供我们使用。 我们自然是不想写上图红框处的代码的,希望所有接口直接注入就可以使用。 使用 因此结合以上的需求便有了这个库 feign-plus 它的使用流程其实就是翻版的 spring-cloud-openfeign: @FeignPlusClient(name = "github", url = "${github.url}") public interface Github { @RequestLine("GET /repos/{owner}/{repo}/contributors") List<GitHubRes> contributors(@Param("owner") String owner, @Param("repo") String repo); } 在 SpringBoot 入口进行扫描: @SpringBootApplication @EnableFeignPlusClients(basePackages = "top.crossoverjie.feign.test") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 在 Spring 上下文中直接注入使用: @Autowired private Github github ; List<GitHubRes> contributors = github.contributors("crossoverJie", "feign-plus"); logger.info("contributors={}", new Gson().toJson(contributors)); 所以当我们需要调用一些外部第三方接口时(比如支付宝、外部 OpenAPI)便可类似于这样定义一个接口,把所有 HTTP 请求的细节屏蔽掉。 当然也适合公司内部之间的服务调用,和咱们以前写 SpringCloud 或 Dubbo 时类似;服务提供方提供一个 Client 包,消费方直接依赖便可以调用。其他的负载均衡、容错之类的由 Service Mesh 替我们完成。 对于内部接口,也可以加上 @RequestMapping("/path") 注解: 在请求时便会在 url 后拼接上 /order,这样在配置 feign.order.service.url 时只需要填入服务提供方的域名或 IP 即可。 feign-plus 也支持切换具体的 httpclient,默认是 okhttp3,通过以下配置便可更改。 # default(okhttp3) feign.httpclient=http2Client 当然也有其他相关配置: feign.plus.max-idle-connections = 520 feign.plus.connect-timeout = 11000 feign.plus.read-timeout = 12000 实现 最后简单聊聊是如何完成的吧,其实本质上就是 spring-cloud-openfeign 的浓缩版。 其中最为核心的便是 top.crossoverjie.feign.plus.factory.FeignPlusBeanFactory 类。 该类实现了 org.springframework.beans.factory.FactoryBean接口,并重写了 getObject() 方法返回一个对象。 这段代码是不是似曾相识,其实就是 Feign 的官方 demo。 这里所返回的对象其实就是我们定义的接口的代理对象,而这个对象本身则是 Feign ,所以再往里说:我们的 http 请求编解码、发起请求等逻辑又被这个 feign 对象所代理了。 这个 HardCodedTarget 则是 Feign 内部用于代理最终请求的对象。 有一个小难受的地方:这样的自己定义 Bean 然后注入对象 Idea 是识别不了的,认为当前上下文没有该 Bean,但是 spring-cloud-openfeign 却可以识别。 由于 Feign 支持多个客户端,所以这里的客户端可以通过配置文件动态指定。 利用 SpringBoot 提供的 @ConditionalOnExpression 注解可以根据配置动态的选择使用哪个 httpclient,也就是动态选择生成哪个 Bean。 总结 这个库的逻辑非常简单,本质上就是封装了 Feign 并提供了 SpringBoot 的支持,欢迎有类似需求的朋友下载使用。 feign-plus源码:https://github.com/crossoverJie/feign-plus 你的点赞与分享是对我最大的支持

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册