-
【功能模块】查询云服务器详情列表GET /v1/{tenant_id}/cloudservers/detail【操作步骤&问题现象】1、按照文档部分API查询: https://ecs.xxx.com/v1/{tenant_id}/cloudservers/detail2、{"error_msg":"API not exist or not published in the environment","error_code":"APIGW.0101"}【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
应用快速接入里边的设备属性的ListProperties接口请求超时
-
任一项目中,接口都很多,理解接口就是一个个读接口源码吗?相信没有人能把所有接口细节记住,如何才能理清繁杂的接口呢?找主线,看风格。找主线,你需要找到一条功能主线,建立起对这个项目结构性的认知,而不是一上来就把精力放在每个接口的细节。你对细节部分的了解会随着你对项目的深入而逐渐增加。而有了主线,就有着力点,可不断深入。但要学习的不只是这些接口的用法,要想从项目接口设计上学到更多,就需要关注它所引导的风格。为什么要看风格?它希望你怎样使用它或二次开发。还要维护项目的一致性,必须统一风格。不少项目里共存多种不同风格的接口,就是每个人都在各设计各习惯的接口,导致混乱。这一讲,我们就来一起来学习怎样看接口,我选择的项目是Ruby on Rails,因为它的接口设计风格是带给我最多震撼的,无论是编程接口的优雅,还是开发过程接口的顺畅。看设计要先看模型。Ruby on Rails模型Rails是标准的基于MVC模型进行开发的Web框架,给行业带来巨大冲击的是它的接口设计。Rails一个重要的设计理念就是约定优于配置,无需配置,按照缺省的风格就可以完成基本的功能,这样的理念贯穿在Rails各个接口的设计中。理解接口应该先找主线,找到项目主线的一个方法就是从起步走文档开始,因为它会把项目最基本的用法展现给你,你可以轻松地找到主线。Rails的起步走文档做得就非常好,主线可以说是一目了然。它用了一个Web项目帮你介绍了Rails开发的基本过程,通过这个过程,你就对Rails有了初步的印象。有了主线之后,我们就要开始从中了解接口的风格。Rails给我们提供的三种接口,分别是:Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。接下来,我们就一个个地深入其中,了解它们的风格,以及它们给行业带来的不同思考。REST 接口先说应用对外暴露的接口:REST API。REST如今已经成为很多人耳熟能详的名词,它把Web 的各种信息当作资源。既然是资源,它就可以对这些Web信息做各种操作,这些操作对应着HTTP的各种动词(GET、POST、PUT、DELETE等)。REST是为了纠正大家对HTTP的误用。 REST刚出来的时候,开发者普遍觉得这是一个好的想法,但怎么落地呢?没有几个人想得清楚。Rails对REST的使用方式做了一个约定。只要你遵循Rails的惯用写法,写出来的结果基本上就是符合REST结构的,也就是说,Rails把REST这个模型用一种更实用的方式落地了。Rails.application.routes.draw do ... resources :articles ...end在用Rails写程序的时候,你只要添加一个resource进去,它就会替你规划好这个资源应该如何去写、怎么设计URL、用哪些HTTP动词,以及它们对应到哪些方法。$ bin/rails routes Prefix Verb URI Pattern Controller#Action articles GET /articles(.:format) articles#index POST /articles(.:format) articles#create new_article GET /articles/new(.:format) articles#newedit_article GET /articles/:id/edit(.:format) articles#edit article GET /articles/:id(.:format) articles#show PATCH /articles/:id(.:format) articles#update PUT /articles/:id(.:format) articles#update DELETE /articles/:id(.:format) articles#destroy root GET / welcome#index看了Rails给你的这个映射关系后,你就知道自己该怎么写代码了。这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。API 接口我们再来看API接口。当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句:Article.find_by_title("foo")1要知道,那个时候用Java写程序,即便是想做一个最简单的查询,写的代码也是相当多的。我们不仅要创建一个对象,还要写对应的SQL语句,还要把查询出来的结果,按照一定的规则组装起来。而 Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现的,Rails会替你自动实现。当我们需要有更多的查询条件时,只要一个一个附加上去就可以了。Article.find_by_title_and_author("foo", "bar")1从功能的角度说,这样的查询在功能上是完全一样的,但显然Rails程序员和Java程序员的工作量是天差地别的,就是不同的编程接口所造成的。所以一个好的接口设计会节省很多工作量,会减少犯错的几率。因为它会在背后帮你实现那些细节。而设计不好的接口,则会把其中的细节暴露出来,让使用者参与其中。写程序库和写应用虽然都是写代码,但二者的要求确实相差极大。把细节暴露给所有人,显然是一个增加犯错几率的事情。Rails的API接口让人们开始关注API的表达性。比如,每篇文章可以有多个评论,用Rails的方式写出来是这样的:class Article < ApplicationRecord has_many :comments ...end而如果用传统Java风格,你写出来的代码,可能是这个样子的:class Article { private List comments; ...}“有多个”这种表示关系的语义用has_many表示更为直白,如果用List ,你是无法辨别它是一个属性,还是一个关系的。Rails里面类似的代码有很多,包括我们前面提到的find_by。所以,如果你去读Rails写成的应用,会觉得代码的可读性要好得多。由于Rails的蓬勃发展,人们也开始注意到好接口的重要性。Java后期的一些开源项目也开始向Rails学习。比如,使用Spring Data JPA的项目后,我们也可以写出类似Rails的代码。声明一对多的关系:class Article { @OneToMany private List comments; ...}12345而查询要定义一个接口,代码可以这样写:interface ArticleRepository extends JpaRepository<Article, Long> { Article findByTitle(String title); Article findByTitleAndAuthor(String title, String author);}当你需要使用的时候,只要在服务里调用对应的接口即可。class ArticleService { private ArticleRepository repository; ... public Article findByTitle(final String title) { return repository.findByTitile(title); }}显然,Java无法像Rails那样不声明方法就去调用,因为这是由Ruby的动态语言特性支持的,而Java这种编译型语言是做不到的。不过比自己写SQL、做对象映射,已经减少了很多的工作量。Spring Data JPA之所以能够只声明接口,一个重要的原因就是它利用了Spring的依赖注入,帮你动态生成了一个类,不用自己编写。简单,表达性好,这就是Rails API风格。命令行接口如果要创建一个新项目,你会怎么做呢?使用Rails,这就是一个命令:$ rails new article-app这个命令执行的结果生成的不仅仅是源码,还有一些鼓励你去做的最佳实践,比如:它选择了Rake作为自动化管理的工具,生成了对应的Rakefile它选择了RubyGem作为包管理的工具,生成了对应的Gemfile为防止在不同的人在机器上执行命令的时间不同,导致对应的软件包有变动,生成了对应的Gemfile.lock,锁定了软件包的版本把对数据库的改动变成了代码;……而这仅仅是一个刚刚生成的工程,我们一行代码都没有写,它却已经可以运行了。$ bin/rails server这就启动了一个服务器,访问 http://localhost:3000/ 这个 URL,你就可以访问到一个页面。如果你打算开始编写代码,你也可以让它帮你生成代码骨架。执行下面的命令,它会帮你生成一个controller类,生成对应的页面,甚至包括了对应的测试,这同样是一个鼓励测试的最佳实践。$ bin/rails generate controller Welcome index总结看接口的一个方法是找主线,看风格。先找到一条功能主线,对项目建立起结构性的了解。有了主线之后,再沿着主线把相关接口梳理出来。查看接口,关键要看接口的风格,也就是项目作者引导人们怎样使用接口。在一个项目里,统一接口风格也是很重要的一个方面,所以,熟悉现有的接口风格,保持统一也是非常重要的。Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。一个好的接口设计,无论是最佳实践的引入,抑或是API设计风格的引导,都可以帮助我们建立起良好的开发习惯。理解一个项目的接口,先找主线,再看风格
-
“互联网+”大赛华为云赛道命题攻略合集命题专家重磅解读:CloudIDE命题攻略:明确业务场景,快速开发插件EI命题攻略:能力灵活,开放式运用,助你实现AI梦想IoT命题攻略:仅需四步,轻松实现场景智能化设计API命题攻略:理清三步解题思路,用好开发工具AI创新应用命题攻略:大胆脑洞,共绘智慧生活蓝图智慧校园命题攻略:你的智慧校园,WeLink帮你来建赛题介绍——用API解决现实问题一个典型的中国家庭包括4位老人、2位成年人和1位孩子(4+2+1),并且人手一部手机,他们在日常生活以及工作学习中会用手机拍摄大量照片,这些照片基本存储在各自的手机中,然后通过微信、微博、抖音等社交APP进行分享。但这样会存在很多问题,比如不方便批量分享、手机本地存储空间不足等。本赛题旨在借助华为云相关API,例如图片识别能力给照片进行智能分类,分类后通过集中存储在云端,用户还可以给照片设置隐私,不分享。选手可以在API Explorer平台查看学习相关的云服务API来完成赛题。最终的作品形态不限,可以是移动应用、小程序、云服务、web、桌面应用等。赛题解读:厘清三步思路,用对开发工具在解读赛题前,先为大家科普一下华为云的API Explorer平台,API Explorer是为开发者提供一站式API解决方案的统一平台,它集成华为云服务所有开放API,支持全量快速检索、可视化调试、帮助文档、代码示例、Mock等能力,帮助开发者快速查找、学习API和使用API开发代码。目前有17大类、100+产品服务、3800+开放API。本赛题的核心就是借助华为云的API能力实现应用的开发,下面我们进一步分析一下赛题说明,主要分为四个步骤:将多个家庭成员的手机照片集中备份到云端上;通过图片识别能力给照片进行智能分类;分类后通过集中存储在云端,可以通过大屏等终端共享给家人;可以设置隐私标签,让图片无法分享。其中,我们提炼出几个关键词:图片识别、图片分类、图片存储,其实关于图片的处理也是这几年AI技术关注研究的重点,从这个角度看,这个赛题考查的不仅仅是API的应用,还有与计算机视觉相关的技术能力。总结一下,参赛选手如果想要借助API构建满足要求的应用,可以参考下面这个思路:1、通过调用OBS的API接口,去访问和操作云存储中的图片数据;2、通过调用图片识别的API接口,对图片进行打标签;3、通过调用ModelArts的API接口,对图片进行进一步分类,并识别去除隐私图片。其中提及到的华为云产品有:OBS、图像识别、ModelArts。OBS是一款云存储服务,具备标准Restful API接口,可存储任意数量和形式的非结构化数据。ModelArts是面向开发者的一站式 AI 开发平台,提供海量数据预处理、智能标注、大规模分布式训练、自动化模型生成和端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。这些产品的能力都已经“打包”成开放的API接口,选手可以在API Explorer中查看、学习和使用。除此之外,参赛选手可以通过DevStar/DevCloud快速开发应用(APP/小程序/Web等)。其中DevStar提供了Web、App、微服务等不同类型的80+通用框架模板,选手无需从零开始开发应用。DevCloud是一站式云端软件开发平台,可随时随在云端交付软件全生命周期,覆盖需求下发、代码提交、代码检查、代码编译、验证、部署、发布。下面,我们将着重介绍此次赛题的主要产品API Explorer的使用方法以及相关案例。API Explorer使用指南从华为云官网——开发者——资源工具,即可进入到API Explorer页面,这里包括华为云开放的所有API信息,选手在这个平台上可以快速的查看、搜索API文档,以及可视化调试API,具体的关键能力如下图所示。首先是支持开放API的在线检索和可视化调试, 可以定位到相关云服务,快速查询云服务下所有开放API。回到本次赛题,选手在API Explorer搜索“ModeIArts”,即可在界面中看到模型部署的API文档。通过API文档可以获取更详尽的信息,包括接口约束、请求参数说明、示例、返回参数以及SDK等非常全的信息。选择API后,通过填写参数,可以直接进行在线调试,查看API的调用返回结果。如果调用接口返回了错误码,可以在错误码中心快速找到对应的错误详细信息以及处理措施建议,快速解决API调用出现的问题。当熟悉API功能后,需要用代码来调用API,则能通过API Explorer查看SDK代码示例,支持Java、Python、Go等七种主流开发语言,通过引入对应语言SDK即可快速在应用程序中调用API,而且所有SDK代码已通过GitHub开源。同时,API Explorer还提供了其他云上/云下CLI、API Mock、场景示例等特性,方便开发者使用。关于API的一些应用案例,可以参考华为云社区的云享专题:【技术补给站】第7期:20个超实用API应用案例,开启API进阶之路(内附资料下载)。什么样的作品容易拿高分?上述提到的华为云产品,都可以提高大家开发应用的效率,但是最终呈现的结果如何,还是要看各位选手对于技术的理解掌握,解题思路的创新,项目的完成度等等。从大赛的评分维度来看,作品的创新性、技术实现和交付、商业性以及团队的分工配置都非常重要。以创新性为例,包括图片分类算法的准确度,API的设计调用等等;团队方面,分工协作要清晰,组织架构、人员配置要合理。项目的技术路线清晰明确,技术工具成熟可靠。另外,有设计完整、可行的商业模式得到高分的可能性更大。
-
Ansible-gen是一款华为提供的用python语言编写的Ansible API自动化生成工具。Ansible-gen的使命是帮助用户按照自己的需求生成在Ansible框架上运行的Ansible API。除此之外, Ansible-gen还可以将生成的Ansible API自动化部署到Ansible框架中、对用户输入进行约束检查等功能,可以极大限度的减轻用户开发人员的工作。Ansible-gen工具已经开源,请访问https://github.com/HuaweiDatacomm/ansible-gen了解详细信息。图 1 Ansible-gen工作框架总览用户可以编写自己定制的Ansible API描述文件(使用XML格式,具体要求参照下文),将所管理设备对应的YANG文件和Ansible API描述文件作为输入,运行Ansible-gen工具,可以自动化生成Ansible API,并且自动化部署到ansible框架中。图 2 Ansible-gen输入与输出我们在github社区上有一个示例工程,描述了如何使用ansible-gen生成定制化ansible API构建三层VPN网络,请访问这里了解详细信息。
-
任一项目中,接口都很多,理解接口就是一个个读接口源码吗?相信没有人能把所有接口细节记住,如何才能理清繁杂的接口呢?找主线,看风格。找主线,你需要找到一条功能主线,建立起对这个项目结构性的认知,而不是一上来就把精力放在每个接口的细节。你对细节部分的了解会随着你对项目的深入而逐渐增加。而有了主线,就有着力点,可不断深入。但要学习的不只是这些接口的用法,要想从项目接口设计上学到更多,就需要关注它所引导的风格。为什么要看风格?它希望你怎样使用它或二次开发。还要维护项目的一致性,必须统一风格。不少项目里共存多种不同风格的接口,就是每个人都在各设计各习惯的接口,导致混乱。这一讲,我们就来一起来学习怎样看接口,我选择的项目是Ruby on Rails,因为它的接口设计风格是带给我最多震撼的,无论是编程接口的优雅,还是开发过程接口的顺畅。看设计要先看模型。Ruby on Rails模型Rails是标准的基于MVC模型进行开发的Web框架,给行业带来巨大冲击的是它的接口设计。Rails一个重要的设计理念就是约定优于配置,无需配置,按照缺省的风格就可以完成基本的功能,这样的理念贯穿在Rails各个接口的设计中。理解接口应该先找主线,找到项目主线的一个方法就是从起步走文档开始,因为它会把项目最基本的用法展现给你,你可以轻松地找到主线。Rails的起步走文档做得就非常好,主线可以说是一目了然。它用了一个Web项目帮你介绍了Rails开发的基本过程,通过这个过程,你就对Rails有了初步的印象。有了主线之后,我们就要开始从中了解接口的风格。Rails给我们提供的三种接口,分别是:Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。接下来,我们就一个个地深入其中,了解它们的风格,以及它们给行业带来的不同思考。REST 接口先说应用对外暴露的接口:REST API。REST如今已经成为很多人耳熟能详的名词,它把Web 的各种信息当作资源。既然是资源,它就可以对这些Web信息做各种操作,这些操作对应着HTTP的各种动词(GET、POST、PUT、DELETE等)。REST是为了纠正大家对HTTP的误用。 REST刚出来的时候,开发者普遍觉得这是一个好的想法,但怎么落地呢?没有几个人想得清楚。Rails对REST的使用方式做了一个约定。只要你遵循Rails的惯用写法,写出来的结果基本上就是符合REST结构的,也就是说,Rails把REST这个模型用一种更实用的方式落地了。Rails.application.routes.draw do ... resources :articles ...end在用Rails写程序的时候,你只要添加一个resource进去,它就会替你规划好这个资源应该如何去写、怎么设计URL、用哪些HTTP动词,以及它们对应到哪些方法。$ bin/rails routes Prefix Verb URI Pattern Controller#Action articles GET /articles(.:format) articles#index POST /articles(.:format) articles#create new_article GET /articles/new(.:format) articles#newedit_article GET /articles/:id/edit(.:format) articles#edit article GET /articles/:id(.:format) articles#show PATCH /articles/:id(.:format) articles#update PUT /articles/:id(.:format) articles#update DELETE /articles/:id(.:format) articles#destroy root GET / welcome#index看了Rails给你的这个映射关系后,你就知道自己该怎么写代码了。这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。API 接口我们再来看API接口。当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句:Article.find_by_title("foo")1要知道,那个时候用Java写程序,即便是想做一个最简单的查询,写的代码也是相当多的。我们不仅要创建一个对象,还要写对应的SQL语句,还要把查询出来的结果,按照一定的规则组装起来。而 Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现的,Rails会替你自动实现。当我们需要有更多的查询条件时,只要一个一个附加上去就可以了。Article.find_by_title_and_author("foo", "bar")1从功能的角度说,这样的查询在功能上是完全一样的,但显然Rails程序员和Java程序员的工作量是天差地别的,就是不同的编程接口所造成的。所以一个好的接口设计会节省很多工作量,会减少犯错的几率。因为它会在背后帮你实现那些细节。而设计不好的接口,则会把其中的细节暴露出来,让使用者参与其中。写程序库和写应用虽然都是写代码,但二者的要求确实相差极大。把细节暴露给所有人,显然是一个增加犯错几率的事情。Rails的API接口让人们开始关注API的表达性。比如,每篇文章可以有多个评论,用Rails的方式写出来是这样的:class Article < ApplicationRecord has_many :comments ...end而如果用传统Java风格,你写出来的代码,可能是这个样子的:class Article { private List comments; ...}“有多个”这种表示关系的语义用has_many表示更为直白,如果用List ,你是无法辨别它是一个属性,还是一个关系的。Rails里面类似的代码有很多,包括我们前面提到的find_by。所以,如果你去读Rails写成的应用,会觉得代码的可读性要好得多。由于Rails的蓬勃发展,人们也开始注意到好接口的重要性。Java后期的一些开源项目也开始向Rails学习。比如,使用Spring Data JPA的项目后,我们也可以写出类似Rails的代码。声明一对多的关系:class Article { @OneToMany private List comments; ...}12345而查询要定义一个接口,代码可以这样写:interface ArticleRepository extends JpaRepository<Article, Long> { Article findByTitle(String title); Article findByTitleAndAuthor(String title, String author);}当你需要使用的时候,只要在服务里调用对应的接口即可。class ArticleService { private ArticleRepository repository; ... public Article findByTitle(final String title) { return repository.findByTitile(title); }}显然,Java无法像Rails那样不声明方法就去调用,因为这是由Ruby的动态语言特性支持的,而Java这种编译型语言是做不到的。不过比自己写SQL、做对象映射,已经减少了很多的工作量。Spring Data JPA之所以能够只声明接口,一个重要的原因就是它利用了Spring的依赖注入,帮你动态生成了一个类,不用自己编写。简单,表达性好,这就是Rails API风格。命令行接口如果要创建一个新项目,你会怎么做呢?使用Rails,这就是一个命令:$ rails new article-app这个命令执行的结果生成的不仅仅是源码,还有一些鼓励你去做的最佳实践,比如:它选择了Rake作为自动化管理的工具,生成了对应的Rakefile它选择了RubyGem作为包管理的工具,生成了对应的Gemfile为防止在不同的人在机器上执行命令的时间不同,导致对应的软件包有变动,生成了对应的Gemfile.lock,锁定了软件包的版本把对数据库的改动变成了代码;……而这仅仅是一个刚刚生成的工程,我们一行代码都没有写,它却已经可以运行了。$ bin/rails server这就启动了一个服务器,访问 http://localhost:3000/ 这个 URL,你就可以访问到一个页面。如果你打算开始编写代码,你也可以让它帮你生成代码骨架。执行下面的命令,它会帮你生成一个controller类,生成对应的页面,甚至包括了对应的测试,这同样是一个鼓励测试的最佳实践。$ bin/rails generate controller Welcome index总结看接口的一个方法是找主线,看风格。先找到一条功能主线,对项目建立起结构性的了解。有了主线之后,再沿着主线把相关接口梳理出来。查看接口,关键要看接口的风格,也就是项目作者引导人们怎样使用接口。在一个项目里,统一接口风格也是很重要的一个方面,所以,熟悉现有的接口风格,保持统一也是非常重要的。Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。一个好的接口设计,无论是最佳实践的引入,抑或是API设计风格的引导,都可以帮助我们建立起良好的开发习惯。理解一个项目的接口,先找主线,再看风格。
-
任一项目中,接口都很多,理解接口就是一个个读接口源码吗?相信没有人能把所有接口细节记住,如何才能理清繁杂的接口呢?找主线,看风格。找主线,你需要找到一条功能主线,建立起对这个项目结构性的认知,而不是一上来就把精力放在每个接口的细节。你对细节部分的了解会随着你对项目的深入而逐渐增加。而有了主线,就有着力点,可不断深入。但要学习的不只是这些接口的用法,要想从项目接口设计上学到更多,就需要关注它所引导的风格。为什么要看风格?它希望你怎样使用它或二次开发。还要维护项目的一致性,必须统一风格。不少项目里共存多种不同风格的接口,就是每个人都在各设计各习惯的接口,导致混乱。这一讲,我们就来一起来学习怎样看接口,我选择的项目是Ruby on Rails,因为它的接口设计风格是带给我最多震撼的,无论是编程接口的优雅,还是开发过程接口的顺畅。看设计要先看模型。Ruby on Rails模型Rails是标准的基于MVC模型进行开发的Web框架,给行业带来巨大冲击的是它的接口设计。Rails一个重要的设计理念就是约定优于配置,无需配置,按照缺省的风格就可以完成基本的功能,这样的理念贯穿在Rails各个接口的设计中。理解接口应该先找主线,找到项目主线的一个方法就是从起步走文档开始,因为它会把项目最基本的用法展现给你,你可以轻松地找到主线。Rails的起步走文档做得就非常好,主线可以说是一目了然。它用了一个Web项目帮你介绍了Rails开发的基本过程,通过这个过程,你就对Rails有了初步的印象。有了主线之后,我们就要开始从中了解接口的风格。Rails给我们提供的三种接口,分别是:Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。接下来,我们就一个个地深入其中,了解它们的风格,以及它们给行业带来的不同思考。REST 接口先说应用对外暴露的接口:REST API。REST如今已经成为很多人耳熟能详的名词,它把Web 的各种信息当作资源。既然是资源,它就可以对这些Web信息做各种操作,这些操作对应着HTTP的各种动词(GET、POST、PUT、DELETE等)。REST是为了纠正大家对HTTP的误用。 REST刚出来的时候,开发者普遍觉得这是一个好的想法,但怎么落地呢?没有几个人想得清楚。Rails对REST的使用方式做了一个约定。只要你遵循Rails的惯用写法,写出来的结果基本上就是符合REST结构的,也就是说,Rails把REST这个模型用一种更实用的方式落地了。Rails.application.routes.draw do ... resources :articles ...end在用Rails写程序的时候,你只要添加一个resource进去,它就会替你规划好这个资源应该如何去写、怎么设计URL、用哪些HTTP动词,以及它们对应到哪些方法。$ bin/rails routes Prefix Verb URI Pattern Controller#Action articles GET /articles(.:format) articles#index POST /articles(.:format) articles#create new_article GET /articles/new(.:format) articles#newedit_article GET /articles/:id/edit(.:format) articles#edit article GET /articles/:id(.:format) articles#show PATCH /articles/:id(.:format) articles#update PUT /articles/:id(.:format) articles#update DELETE /articles/:id(.:format) articles#destroy root GET / welcome#index看了Rails给你的这个映射关系后,你就知道自己该怎么写代码了。这就是一种约定,不需要你费心思考,因为这是人家总结出来的行业中的最佳实践。只要按照这个规范写,你写的就是一个符合REST规范的代码,这就是Rails引导的外部接口风格。API 接口我们再来看API接口。当年我接触Rails时,最让我感到震惊的是它的数据库查询方式,与传统开发的风格截然不同,就这么简单的一句:Article.find_by_title("foo")1要知道,那个时候用Java写程序,即便是想做一个最简单的查询,写的代码也是相当多的。我们不仅要创建一个对象,还要写对应的SQL语句,还要把查询出来的结果,按照一定的规则组装起来。而 Rails用一句轻描淡写find_by就解决了所有的问题,而且,这个find_by_title方法还不是我实现的,Rails会替你自动实现。当我们需要有更多的查询条件时,只要一个一个附加上去就可以了。Article.find_by_title_and_author("foo", "bar")1从功能的角度说,这样的查询在功能上是完全一样的,但显然Rails程序员和Java程序员的工作量是天差地别的,就是不同的编程接口所造成的。所以一个好的接口设计会节省很多工作量,会减少犯错的几率。因为它会在背后帮你实现那些细节。而设计不好的接口,则会把其中的细节暴露出来,让使用者参与其中。写程序库和写应用虽然都是写代码,但二者的要求确实相差极大。把细节暴露给所有人,显然是一个增加犯错几率的事情。Rails的API接口让人们开始关注API的表达性。比如,每篇文章可以有多个评论,用Rails的方式写出来是这样的:class Article < ApplicationRecord has_many :comments ...end而如果用传统Java风格,你写出来的代码,可能是这个样子的:class Article { private List<Comment> comments; ...}“有多个”这种表示关系的语义用has_many表示更为直白,如果用List ,你是无法辨别它是一个属性,还是一个关系的。Rails里面类似的代码有很多,包括我们前面提到的find_by。所以,如果你去读Rails写成的应用,会觉得代码的可读性要好得多。由于Rails的蓬勃发展,人们也开始注意到好接口的重要性。Java后期的一些开源项目也开始向Rails学习。比如,使用Spring Data JPA的项目后,我们也可以写出类似Rails的代码。声明一对多的关系:class Article { @OneToMany private List<Comment> comments; ...}12345而查询要定义一个接口,代码可以这样写:interface ArticleRepository extends JpaRepository<Article, Long> { Article findByTitle(String title); Article findByTitleAndAuthor(String title, String author);}当你需要使用的时候,只要在服务里调用对应的接口即可。class ArticleService { private ArticleRepository repository; ... public Article findByTitle(final String title) { return repository.findByTitile(title); }}显然,Java无法像Rails那样不声明方法就去调用,因为这是由Ruby的动态语言特性支持的,而Java这种编译型语言是做不到的。不过比自己写SQL、做对象映射,已经减少了很多的工作量。Spring Data JPA之所以能够只声明接口,一个重要的原因就是它利用了Spring的依赖注入,帮你动态生成了一个类,不用自己编写。简单,表达性好,这就是Rails API风格。命令行接口如果要创建一个新项目,你会怎么做呢?使用Rails,这就是一个命令:$ rails new article-app这个命令执行的结果生成的不仅仅是源码,还有一些鼓励你去做的最佳实践,比如:它选择了Rake作为自动化管理的工具,生成了对应的Rakefile它选择了RubyGem作为包管理的工具,生成了对应的Gemfile为防止在不同的人在机器上执行命令的时间不同,导致对应的软件包有变动,生成了对应的Gemfile.lock,锁定了软件包的版本把对数据库的改动变成了代码;……而这仅仅是一个刚刚生成的工程,我们一行代码都没有写,它却已经可以运行了。$ bin/rails server这就启动了一个服务器,访问 http://localhost:3000/ 这个 URL,你就可以访问到一个页面。如果你打算开始编写代码,你也可以让它帮你生成代码骨架。执行下面的命令,它会帮你生成一个controller类,生成对应的页面,甚至包括了对应的测试,这同样是一个鼓励测试的最佳实践。$ bin/rails generate controller Welcome index总结看接口的一个方法是找主线,看风格。先找到一条功能主线,对项目建立起结构性的了解。有了主线之后,再沿着主线把相关接口梳理出来。查看接口,关键要看接口的风格,也就是项目作者引导人们怎样使用接口。在一个项目里,统一接口风格也是很重要的一个方面,所以,熟悉现有的接口风格,保持统一也是非常重要的。Web应用对外暴露的接口:REST API;程序员写程序时用到的接口:API;程序员在开发过程中用到的接口:命令行。一个好的接口设计,无论是最佳实践的引入,抑或是API设计风格的引导,都可以帮助我们建立起良好的开发习惯。理解一个项目的接口,先找主线,再看风格。
-
大赛详情地址:https://competition.huaweicloud.com/information/1000041288/introduction作者昵称:老老刘参加了华为云API入门学习赛,按照大赛给的指导流程一步步来做。首先当然是报名然后开通人脸检测服务接着我们去找一张美女图根据指导说明上传调试最后将调试结果截图打包上传就ok啦,很简单
-
大赛详情地址:https://competition.huaweicloud.com/information/1000041288/introduction作者昵称:橙子是红的今天是最后一天冲鸭!!!活动时间:11月16日~11月20日奖励规则:在11月16日至20日的5天时间内,按照操作指导完成作品提交,且成绩50分及以上(按照操作指导完成即可获得50分),即可获得作品提交当日的抽奖机会。抽奖规则:每天针对提交作品的同学进行抽奖,中奖概率为当日提交作品人数的40%。第二天在群内公布前一天中奖结果。备注:每日提交上限5次,当日抽奖。奖品包括:华为快充移动电源、华为荣耀手环4、荣耀体脂称2、100元京东卡、50元京东卡、华为定制棒球帽/渔夫帽、¥465案例学院会员卡、AM115半入式耳机,随机抽取发放。首先报名>>大赛链接:https://competition.huaweicloud.com/information/1000041287/introduction没实名的需要实名认证:>>点击实名认证链接:https://account.huaweicloud.com/usercenter/?region=cn-north-1&locale=zh-cn#/accountindex/realNameAuthing接下来就是根据指导来点击人脸识别服务链接:https://console.huaweicloud.com/frs/?region=cn-north-4#/frs/home本地上传任意一张人像图片https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=FRS&api=FaceDetectV2ByFile点击调试,将调试成功页面截图,保存成zip包。回到大赛提交作品页https://competition.huaweicloud.com/information/1000041287/submission将保存好的zip包作为作品上传到大赛提交页。完成!
-
大赛详情地址:https://competition.huaweicloud.com/information/1000041288/introduction作者昵称:平平无奇的平平这个入门学习赛还是蛮良心的,流程简单,中奖率也挺高,奖品也不错,我想很多朋友也都是冲着奖品来的吧。首先开通服务然后选择byfile,找一张人像图上传,最后点击调试。这个页面别忘截图保存。最后打包成zip上传,搞定!接下来就是等第二天的抽奖了!!!
-
大赛详情地址:https://competition.huaweicloud.com/information/1000041288/introduction作者昵称:老老刘参加了华为云API入门学习赛,按照大赛给的指导流程一步步来做。首先当然是报名然后开通人脸检测服务接着我们去找一张美女图根据指导说明上传调试最后将调试结果截图打包上传就ok啦,很简单
-
作者昵称:王亦臻大赛链接:https://competition.huaweicloud.com/information/1000041287/introduction、正文:从华为云高校青年活动得知有AI人脸识别大赛这次技术活动,就参与了。按照大赛给与的赛题指导,一步一步操作,明白了人脸识别下的API服务。直接上传准备好的人脸图片,然后按照操作,调试。结果图:以后直接调用API,就可以识别人的各种信息,很方便。
-
华为云API入门学习赛:AI人脸识别分享者昵称:AAAI本次根据API学习赛(AI人脸识别)比赛指导进行完成。访问人脸检测接口需要进行选取地区等参数之后我们在调用的时候可以直接调用接口参赛心得:本次比赛通过对于AI的模型进行实际操作,了解到了很多知识,尤其时调用API接口进行开发,极大的减少了开发的时间。大赛详情地址:https://competition.huaweicloud.com/information/1000041287/introduction
-
作者昵称:lichengqian大赛链接:https://competition.huaweicloud.com/information/1000041287/introduction、正文:对于AI人脸识别的心得分享 这次的华为云API的入门学习赛开设了多个部分,其中之一便是AI人脸识别,因为是API的入门学习嘛,所以在我的学习过程中并没用感到太大的困难(本人软件工程专业大三),因此我觉得只要是有点编程基础的同学都可以积极的加入到华为云的API入门学习里面,在这里面可以提前的了解到一些在高校不常接触的前沿知识,丰富自己的项目实战经验,不得不说对于自己的知识拓展还是能起到一定的办帮助的。下面来分享一下关于人脸识别调试的简单操作,希望对大家有所帮助。人脸识别调试步骤:1、开通人脸识别服务 按住键盘Ctrl键鼠标点开如下链接,在新窗口打开窗口 https://console.huaweicloud.com/frs/?region=cn-north-4#/frs/home如果没有账号,请根据指引完成账号注册和实名认证。实名认证后,退出重新登录一下。选择”北京四”(注意要实名认证后,才能有北京四),点击”开通服务”按钮开通人脸检测服务2.打开人脸识别调试部分进行如下图操作3.选择地区为北京四,之后吧事先下载好的人脸识别照片上传,参数填写数字14.做完以上操作之后,点击调试,即可完成,便可以看到响应体的返回信息,包括人脸人物的性别年龄等预测信息详细操作请看人脸识别官方模板
-
分享者昵称:王亦臻因为不懂怎么编写代码,只能按照操作步骤,最后分数50分以上。先点预览代码在CloudIDE打开,如果没有跳转,需先开通服务。因为不懂编写代码,所以todo直接跳过。RUN,注意:时间按照要求来,毕竟后面有坑。会跳出一个新的页面,直接在网址后面添加/treasures?request=3,50再确定,就会跳出正常的输出页面。API注册,这一块,一定得仔细。名字随便,id和sl_domain一定得复制到本地上,我是直接复制到qq,或者你也可以留着网页。创建API这两参数一定得按要求填写(我之前url_domain填错,后面就访问不了)url_domian就填写这一步的网址,没有后面的红色部分。group_id填写上图的id,然后调试后面就按照大赛给的操作步骤一步一步来,一定注意每一步的id是不一样的。我的分数大赛详情地址:https://competition.huaweicloud.com/information/1000041288/introduction?share=7cefc64949f249379c2c5354a51c39a9
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签