×

rest api c

rest api(webservice接口和restful接口哪个更好)

admin admin 发表于2024-09-05 20:56:14 浏览5 评论0

抢沙发发表评论

大家好,关于rest api很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于webservice接口和restful接口哪个更好的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

webservice接口和restful接口哪个更好

REST是一种架构风格,其核心是面向资源,遵循CRUD原则,这个原则告诉我们对于资源只需要4种行为,分别是:创建,获取,更新和删除,并且这些资源执行的操作时通过HTTP协议规定的,而WebService底层是SOAP协议,核心是面向活动,有严格的规范和标准,包括安全,事务等方面。

那么我们是使用RESTful还是WebService就需要考虑资源本身的 ,看资源本身是那种简单的类似增删改查的业务操作,还是那种比较复杂,如转账,事务处理等。其次是看是否有严格的规范和标准的,而且有多个业务系统集成和开发的时候,我们使用SOAP协议就比较优势,如果是简单的数据操作,无事务处理,开发和调用比较简单的话使用REST架构风格比较有优势,较为复杂的面向活动的服务,我们使用REST意义不大。

Yii2 自带的 Rest API 好用吗

  • 个人感觉比较好用,我已经开始用了,官方有教程,输出的格式是通用的 RESTful API 格式。如果有个人自定义的一些数据,可以加到 _meta 中。

  • 个人感觉比较好用,我已经开始用了,官方有教程,输出的格式是通用的 RESTful API 格式。 如果有个人自定义的一些数据,可以加到 _meta 中。

如何更好地设计REST API

  由于REST可以降低开发的复杂度,提高系统的可伸缩性,增强系统的可扩展性,简化应用系统之间的集成,因而得到了广大开发人员的喜爱,同时得到了业界广泛的支持。比如IBM,Google等公司的很多产品都提供了REST API给开发人员;与此同时,大量的开源项目和云计算服务都提供了REST API接口。  而在最近,一些新产品的开发甚至已经几乎完全抛弃了传统的类似JSP的技术, 转而大量使用REST风格的构架设计, 即在服务器端所有商业逻辑都以REST API的方式暴露给客户端, 所有浏览器用户界面使用widget、Ajax、HTML5 等技术,用HTTP的方式与后台直接交互。  那么, 在REST API爆炸式增长的今天, 我们应该如何更好的设计我们的接口, 来提高我们的API的可用性,易用性,可维护性与可扩展性呢?本文将从以下方面与您探讨REST API设计方面的最佳实践:  如何规划资源标识结构与URI模式   如何根据应用场景提供内容协商   如何正确的使用HTTP响应代码   如何处理缓存和并发请求   如何利用数据冗余和链接元素  先决条件  如果您具有如下知识与经验,将有助于您阅读和理解本文章的内容 。  REST相关的基本知识;   HTTP协议的基本知识;   一定的Web开发经验。  REST简介  REST是英文Representational State Transfer的缩写,是近年来迅速兴起的,一种基于HTTP、URI以及XML这些现有协议与标准的,针对网络应用的设计和开发方式。它可以降低开发的复杂度,提高系统的可伸缩性。  REST的核心是可的资源及其集合,用符合Atom文档标准的Feed和Entry表示。每个资源或者集合有一个惟一的URI。系统以资源为中心,构建并提供一系列的Web服务。REST的基本概念和原则包括:系统上的所有事物都被抽象为资源;每个资源对应唯一的资源标识;对资源的操作不会改变资源标识本身;所有的操作都是无状态的;等等。  在REST中,开发人员显式地使用HTTP方法,对系统资源进行创建、读取、更新和删除的操作:  使用POST方法在服务器上创建资源   使用GET方法从服务器检索某个资源或者资源集合   使用PUT方法对服务器的现有资源进行更新   使用DELETE方法删除服务器的某个资源图 1. 用 HTTP 方法操作相册系统资源的简单范例  更好的规划你的资源标识结构与URI模式  REST 中,最基本的莫过于资源标识结构和URI模式了。更好的规划他们,是我们的API设计取得成功的最关键的一步。  首先,我们来看看基本资源类型  上文中提到,在REST构架的设计中,系统中的所有事物都被抽象为资源。  在一个文档系统中,文档、目录、注释、草稿等等,是组成系统的资源。  在一个银行系统中,客户信息、理财产品、利率信息、网点信息等等,是组成系统的资源。  在一个航空客票系统中,旅客信息、机票订单、航班信息、机场信息等等,是组成系统的资源。  这些资源,通常在系统中以“Entry”的形式出现。下面的代码样例向您展示了一个常见的“Entry”资源。  清单 1. 一个简单的Entry资源样例 以下是引用片段: REST API 请求: GET

Kubernetes 的REST API指的是什么

REST API是Kubernetes系统的重要部分,组件之间的所有操作和通信均由API Server处理的REST API调用,大多数情况下,API定义和实现都符合标准的HTTP REST格式,可以通过 kubectl命令管理工具或其他命令行工具来执行。

API 版本

为了在兼容旧版本的同时不断升级新的API,Kubernetes支持多种API版本,每种API版本都有不同的API路径,例如/api/v1或 /apis/extensions/v1beta1。

API版本规则是通过基于API level选择版本,而不是基于资源和域级别选择,是为了确保API能够描述一个清晰的连续的系统资源和行为的视图,能够控制访问的整个过程和控制实验性API的访问。

JSON和Protobuf序列化模式遵循相同的模式变化原则,以下所有描述都涵盖了这两种模式。

需要注意,API版本和软件的版本没有直接关系,不同API版本有不同程度稳定性,API文档中详细描述了每个级别的标准。

Alpha级别:包含alpha名称的版本(例如v1alpha1)。该软件可能包含错误。启用一个功能可能会导致bug。默认情况下,功能可能会被禁用。随时可能会丢弃对该功能的支持,恕不另行通知。API可能在以后的软件版本中以不兼容的方式更改,恕不另行通知。该软件建议仅在短期测试集群中使用,因为错误的风险增加和缺乏长期支持。

Beta级别:包含beta名称的版本(例如v2beta3)。该软件经过很好的测试。启用功能被认为是安全的。默认情况下功能是开启的。细节可能会改变,但功能在后续版本不会被删除对象的模式或语义在随后的beta版本或Stable版本中可能以不兼容的方式发生变化。如果这种情况发生时,官方会提供迁移操作指南。这可能需要删除、和重新创建API对象。该版本在后续可能会更改一些不兼容地方,所以建议用于非关键业务,如果你有多个可以独立升级的集群,你也可以放宽此限制。大家使用过的Beta版本后,可以多给社区反馈,如果此版本在后续更新后将不会有太大变化。

Stable级别:该版本名称命名方式:vX这里X是一个整数。Stable版本的功能特性,将出现在后续发布的软件版本中。

Kubernetes API 概述

REST API 和WebService有哪些不同

从基本原理层次上说,REST 样式和 SOAP 样式 Web Service的区别取决于应用程序是面向资源的还是面向活动的。例如,在传统的WebService中,一个获得天气预报的webservice会暴露一个WebMethod。而RESTful WebService暴露的不是方法,而是对象(资源)。

在 REST 的定义中,一个 Web Service总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源。可以说这是一种全新的思维模式:使用唯一资源定位地址 URI,加上 HTTP 请求方法从而达到对一个发布于互联网资源的唯一描述和操作。

REST的思想归结以下有如下几个关键点:1.面向资源的接口设计所有的接口设计都是针对资源来设计的,也就很类似于我们的面向对象和面向过程的设计区别,只不过现在将网络上的操作实体都作为资源来看待,同时URI的设计也是体现了对于资源的定位设计。后面会提到有一些网站的API设计说是REST设计,其实是RPC-REST的混合体,并非是REST的思想。2.抽象操作为基础的CRUD这点很简单,Http中的get,put,www.hbbz08.com post,delete分别对应了read,update,create,delete四种操作,如果仅仅是作为对于资源的操作,抽象成为这四种已经足够了,但是对于现在的一些复杂的业务服务接口设计,可能这样的抽象未必能够满足。其实这也在后面的几个网站的API设计中暴露了这样的问题,如果要完全按照REST的思想来设计,那么适用的环境将会有限制,而非放之四海皆准的。      3.Http是应用协议而非传输协议这点在后面各大网站的API分析中有很明显的体现,其实有些网站已经走到了SOAP的老路上,说是REST的理念设计,其实是作了一套私有的SOAP协议,因此称之为REST风格的自定义SOAP协议。4.无状态,自包含这点其实不仅仅是对于REST来说的,作为接口设计都需要能够做到这点,也是作为可扩展和高效性的最基本的保证,就算是使用SOAP的WebService也是一样。

如何快速构建基于Spring4.0的Rest API

这是关于使用Spring MVC创建Web API的另一个教程。准备开始——POM由于我是一个maven脑残粉,所以这个项目还是基于maven的。现在Spring 4.0 RC2已经发布了,所以我决定使用最新的依赖管理工具。配置这个应用可以使用JavaConfig完成配置。我把它切分为下面几个部分:ServicesConfig(服务配置)无需扫描组件,配置真的非常简单:@Configurationpublic class ServicesConfig { @Autowired private AccountRepository accountRepository; @Bean public UserService userService() { return new UserService(accountRepository); } @Bean public PasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); }}PersistenceConfig(持久层配置)我们想要一个配置了所有可用仓库的MONGODB配置。在这个简单的应用中我们只用了一个仓库,所以配置也非常的简单@Configurationclass PersistenceConfig { @Bean public AccountRepository accountRepository() throws UnknownHostException { return new MongoAccountRepository(mongoTemplate()); } @Bean public MongoDbFactory mongoDbFactory() throws UnknownHostException { return new SimpleMongoDbFactory(new Mongo(), "r"); } @Bean public MongoTemplate mongoTemplate() throws UnknownHostException { MongoTemplate template = new MongoTemplate(mongoDbFactory(), mongoConverter()); return template; } @Bean public MongoTypeMapper mongoTypeMapper() { return new DefaultMongoTypeMapper(null); } @Bean public MongoMappingContext mongoMappingContext() { return new MongoMappingContext(); } @Bean public MappingMongoConverter mongoConverter() throws UnknownHostException { MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(), mongoMappingContext()); converter.setTypeMapper(mongoTypeMapper()); return converter; }}SecurityConfig(安全配置)理论上,Spring Security 3.2完全可以使用JavaConfig。但对于我这也仅仅是一个理论,所以这里还是选择xml配置的方式:@Configuration@ImportResource("classpath:spring-security-context.xml")public class SecurityConfig {}使用这个xml就让API能使用基本的安全机制了。WebAppInitializer(初始化)我们不想使用web.xml,所以使用下面的代码配置整个应用:@Order(2)public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String getServletMappings() { return new String{"/"}; } @Override protected Class getRootConfigClasses() { return new Class {ServicesConfig.class, PersistenceConfig.class, SecurityConfig.class}; } @Override protected Class getServletConfigClasses() { return new Class {WebMvcConfig.class}; } @Override protected Filter getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter {characterEncodingFilter}; } @Override protected void customizeRegistration(ServletRegistration.Dynamic registration) { registration.setInitParameter("spring.profiles.active", "default"); }}WebAppSecurityInitializer (安全配置初始化)相对于Spring3,可以使用下面这种更加新颖的特性来完成配置:@Order(1)public class WebAppSecurityInitializer extends AbstractSecurityWebApplicationInitializer {}WebMvcConfig (Mvc配置)调度控制器配置。这个也非常简单,仅仅包含了构建一个简单API的最重要配置:@Configuration@ComponentScan(basePackages = { "pl.codeleak.r" }, includeFilters = {@Filter(value = Controller.class)})public class WebMvcConfig extends WebMvcConfigurationSupport { private static final String MESSAGE_SOURCE = "/WEB-INF/i18n/messages"; @Override public RequestMappingHandlerMapping requestMappingHandlerMapping() { RequestMappingHandlerMapping requestMappingHandlerMapping = super.requestMappingHandlerMapping(); requestMappingHandlerMapping.setUseSuffixPatternMatch(false); requestMappingHandlerMapping.setUseTrailingSlashMatch(false); return requestMappingHandlerMapping; } @Bean(name = "messageSource") public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename(MESSAGE_SOURCE); messageSource.setCacheSeconds(5); return messageSource; } @Override public Validator getValidator() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setValidationMessageSource(messageSource()); return validator; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }}这就是需要的配置,非常简单吧!IndexController (INDEX控制器)为了验证这个配置是正确的,我创建了一个IndexController。功能非常简单,只是简单地返回“Hello World”,示例代码如下:@Controller@RequestMapping("/")public class IndexController { @RequestMapping @ResponseBody public String index() { return "This is an API endpoint."; }}如果运行一下这个应用,就能够在浏览器中看到返回的“Hello World”文本。构建APIUserService为了完成Spring安全框架配置,还需要完成另一个部分:实现之前创建的UserService。public class UserService implements UserDetailsService { private AccountRepository accountRepository; public UserService(AccountRepository accountRepository) { this.accountRepository = accountRepository; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Account account = accountRepository.findByEmail(username); if(account == null) { throw new UsernameNotFoundException("user not found"); } return createUser(account); } public void signin(Account account) { SecurityContextHolder.getContext().setAuthentication(authenticate(account)); } private Authentication authenticate(Account account) { return new UsernamePasswordAuthenticationToken(createUser(account), null, Collections.singleton(createAuthority(account))); } private User createUser(Account account) { return new User(account.getEmail(), account.getPassword(), Collections.singleton(createAuthority(account))); } private GrantedAuthority createAuthority(Account account) { return new SimpleGrantedAuthority(account.getRole()); }}构建一个API节点需要处理三个方法:获取当前登陆用户、获取所有用户(可能不是太安全)、创建一个新账户。那么我们就按照这个步骤来进行吧。AccountAccount 将会是我们的第一个Mongo文档。同样也是非常简单:@SuppressWarnings("serial")@Documentpublic class Account implements java.io.Serializable { @Id private String objectId; @Email @Indexed(unique = true) private String email; @JsonIgnore @NotBlank private String password; private String role = "ROLE_USER"; private Account() { } public Account(String email, String password, String role) { this.email = email; this.password = password; this.role = role; } // getters and setters}Repository先创建一个接口:public interface AccountRepository { Account save(Account account); List findAll(); Account findByEmail(String email);}接下来创建它的Mongo实现:public class MongoAccountRepository implements AccountRepository { private MongoTemplate mongoTemplate; public MongoAccountRepository(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } @Override public Account save(Account account) { mongoTemplate.save(account); return account; } @Override public List findAll() { return mongoTemplate.findAll(Account.class); } @Override public Account findByEmail(String email) { return mongoTemplate.findOne(Query.query(Criteria.where("email").is(email)), Account.class); }}API控制器功能快要完成了。我们需要将内容提供给用户,所以需要创建自己的节点:@Controller@RequestMapping("api/account")class AccountController { private AccountRepository accountRepository; @Autowired public AccountController(AccountRepository accountRepository) { this.accountRepository = accountRepository; } @RequestMapping(value = "current", method = RequestMethod.GET) @ResponseStatus(value = HttpStatus.OK) @ResponseBody @PreAuthorize(value = "isAuthenticated()") public Account current(Principal principal) { Assert.notNull(principal); return accountRepository.findByEmail(principal.getName()); } @RequestMapping(method = RequestMethod.GET) @ResponseStatus(value = HttpStatus.OK) @ResponseBody @PreAuthorize(value = "isAuthenticated()") public Accounts list() { List accounts = accountRepository.findAll(); return new Accounts(accounts); } @RequestMapping(method = RequestMethod.POST) @ResponseStatus(value = HttpStatus.CREATED) @ResponseBody @PreAuthorize(value = "permitAll()") public Account create(@Valid Account account) { accountRepository.save(account); return account; } private class Accounts extends ArrayList { public Accounts(List accounts) { super(accounts); } }}我希望你能明白:因为需要直接连接数据库,所以没有对密码进行编码。如果你比较在意这些小细节,那么可以稍后修改。目前这种方式是OK的。完成最后我考虑到还需要一个错误处理器,这样用户就可以看到JSON格式的错误信息而不是HTML。使用Spring Mvc以及@ControllerAdvice很容易实现这一点:@ControllerAdvicepublic class ErrorHandler { @ExceptionHandler(value = Exception.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public ErrorResponse errorResponse(Exception exception) { return new ErrorResponse(exception.getMessage()); } } public class ErrorResponse { private String message; public ErrorResponse(String message) { this.message = message; } public String getMessage() { return message; }}

OK,关于rest api和webservice接口和restful接口哪个更好的内容到此结束了,希望对大家有所帮助。