restful java restful接口开发发 需要哪些配置

从0开始开发restful风格的后端api+前端angular service+一键生成API文档 - CNode技术社区
积分: 1065
loopback讨论组:
StrongLoop是一个基于Nodejs的强大框架,几乎包含了移动开发全栈所需要的所有功能。2013年成立,很少的员工,一个技术驱动,执行力强大的团队。也是在13年我开始接触StrongLoop,当时是为了做nodejs方面的技术选型,看了许多框架,LoopBack是我觉得最酷的一个。我还记得当时是觉得LoopBack的文档太差(主要是跟在线的版本不一样),不知道能活多久所以才放弃了它。时隔一年回来看到这个绿油油的框架,这一年可真是突飞猛进呢。
全栈框架StrongLoop
StrongLoop基本提供了制作一个移动产品所有的框架和工具,从标准的Backend server,Devops,应用监控,。要想介绍完全StrongLoop的所有产品得写一个长篇连载了,这里只简单的浏览一遍。
一个功能很强大的WebServer框架,隐约看到Spring的影子…
这是当时我觉得StrongLoop最好用的一点:根据后端Model自动生成对应的前端SDK。
RESTful API
MEAN stack推动了所有新框架默认支持RESTful API,比如Nodejs里的Node-restify,Sailjs之类的天生就是为了serve API的。StrongLoop还提供了一个用来设计API的工具(beta状态),当然跟RAML比还是差不少的。
Data model
很容易创建数据模型,自动产生对应的RESTful API。
Connectors
当然可以对接各种数据库。
StrongLoop Controller
Debug, Package Management, Build, Deploy, Cluster, Log等等一堆Devops工具。
Application Monitor
一堆监控服务器的模块。
使用StrongLoop,你也可以创建自己的LeanCloud啦,包括Push,地理位置计算(Geopoint),Social Login,User management,各种Replication,Offline sync(离线同步是个好东西),对接各种Stroage云(AWS,Rackspace之类内置了的)。当然,其实这些都是LoopBack里提供的功能,意思是用StrongLoop得永生。
废话不多说,开始!
安装StrongLoop sudo npm install -g strongloop
创建一个应用 slc loopback(找个空白的目录哦) 它只会问你项目叫啥。
创建一个Model slc loopback:model (是不是想起了Yo generator~),然后它就会问一堆乱七八糟的问题了。
plural指的是RESTful API的route名,一个Model对应的route默认情况下会被plural(复数化),比如Post的路径是Posts。
猜一下,像LeanCloud里类似,这时候应该去访问一个类似127.0.0.1:3000/xxx的地方看到他的后台吧~嗯 xxx=explorer
就能看到一个用Swagger做的API dashboard。
看一下项目的结构,像Meteor一样,LoopBack将JS代码分成服务端(server),前端(client),以及共用部分(common,个人认为这种纯schema的方法比Meteor分割的更清晰)。
略过后面的API Explorer,如何连Database,直接看如何在前端使用刚刚创建出来的API。LoopBack的做法是帮助你创建你当前API的各端SDK,目前只支持Android/iOS/Angularjs。如果你用别的Web框架可能就只能自力更生了。
创建自己的SDK lb-ng server/server.js client/lb-services.js 看看client/lb-services.js,不错吧~
嗯,你的前端工程师需要个文档?执行 lb-ng-doc client/lb-services.js 有时候需要在前面添加sudo(不知道为啥),然后访问
就能看到文档啦~这个功能是基于Docular做的。另外,如果你点LoopBack Services进去没东西,别担心,刷新一下。
看看是不是很像早期Angular的文档~
API Designer
相信很多程序员喜欢Parsejs或者LeanCloud的原因都是那个图形化界面的Model设计(或者叫API设计)后台。如果前面用的那个&Yo generator&的API creator看起来还不够贴心,你可以试试StrongLoop新推出的StrongLoop Studio beta。
在工程根目录下sudo npm install -g
安装Studio。
启动Studio strong-studio,自动打开浏览器
去StrongLoop官网右上角注册个账号(文档里居然写了On the bottom right is a link to go to the registration page on ,你们不知道页面很容易改版么…)
用注册的用户名登录进去看到API Composer和Profiler。
Bingo!各种玩耍吧!
p.s.如果这时候你遇到了类似SyntaxError: Cannot parse package.json: Unexpected token e这样的问题,检查一下你工程根下的package.json里是不是被jslint搞乱了(I dont’t know why…)
好吧好吧,我告诉你这个beta还真是特别beta…尽量不要在之前写过代码的项目里用…
如果你缺个可以玩耍的Mongodb:Mongolab
如果你想要个可以协作开发的IDE:Koding
如果你想要个便宜好用的VPS:Digital Ocean
如果你觉得他们家不够便宜:Serverbear
如果你连VPS都不想要,只想部署个Node项目:Nodejitsu
如果你想设计个API尽快给客户端同学,又不想搭Node,找地方部署:Apiary
如果你想做(抄)个APP,又不想花钱雇一堆人:Appdupe
https:/&#/a/6320
总结就是:如下几句命令行:
slc loopback 初始化项目
slc loopback:middleware
slc loopback:datasource
slc loopback:model
slc loopback:property
slc loopback:relation
slc loopback boot-script
slc loopback:swagger
slc loopback:remote-method
slc loopback:acl
slc loopback:export-api-def
创建自己的SDK lb-ng server/server.js client/lb-services.js 看看client/lb-services.js,不错吧~
嗯,你的前端工程师需要个文档?执行 lb-ng-doc client/lb-services.js 有时候需要在前面添加sudo(不知道为啥),然后访问
就能看到文档啦~这个功能是基于Docular做的。另外,如果你点LoopBack Services进去没东西,别担心,刷新一下。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的RESTful接口可以无缝整合神箭手的功能到客户的系统, 无需登录神箭手后台即可管理采集爬虫(包括创建, 启动, 停止, 查询状态, 修改配置等等).
实时API不支持RESTful接口.
神箭手提供的RESTful接口提供了11种管理采集爬虫的接口: , , , , , , ,
RESTful接口通过发送HTTP请求给神箭手实现:
HTTP请求方式: POST或GET(具体请求方式请参考每个接口的)
HTTP请求url: /rest/crawler/接口类型?请求参数
用户key(你可以在中查看你的user_key)
当前时间戳(日起至现在的总秒数, 精确到秒)
签名(用户key, 秒级时间戳, 三个值顺序连接后用MD5加密得到的32位字符串, 大小写均可)
error_code
返回内容(“创建爬虫”接口的返回内容包含crawler_id, 即爬虫ID; “其他”接口包含crawler_status, 即)
无效的user_key
无效的sign
爬虫不存在
请求频率超过限制(对于一个采集爬虫, 一秒内只能调用一次RESTful接口)
请求已过期(timestamp落后服务器时间超过5分钟)
(具体错误原因请在返回的”reason”字段中查看)
注意: “创建爬虫”接口的返回内容无爬虫状态码, 而”其他”接口都有
爬虫刚初始化完成, 即爬虫刚创建, 还未改过配置
定时休息中
正在从暂停中恢复
注意: 接口调用成功后, 会返回
"error_code": 0,
"reason": "success",
"data": {
"crawler_status": "爬虫状态码"
}}
"error_code": 101,
"reason": "Invalid user_key"}所写内容根据自身项目而定
1.安装,web请求测试插件 postman
下载插件包:postman 4.2.7.zip
打开 google的 chrome 浏览器 设置 --》 扩展程序 --》 加载已解压的扩展程序, 如下图:
安装完成后:在地址栏里输入:chrome://apps,点击postman, restClient
2.第二步利用 postman测试,发送web请求。
背景:利用restful作为webservice开发接口,接口开发完毕,进行测试
接口如下:请求格式,响应格式都是 application/json
因为在web中添加了拦截器,当用户未登陆时,直接发送请求会被拦截,故转 步骤三
第3点,完成后
在postman中添加如下的数据,点击 send
3. 假设web项目有拦截器,在测试前必须要求用户处于“登录”状态,才能进行其他的操作
用户登录的接口:
启动redis服务,以便用户post请求的时候,将用户名/密码的数据保存在redis中
在postman中必须填写如下的数据,发送post请求
&A. 请求方式post,在接口中规定; B 请求的url 以及格式 必须与接口规定的一致(header上) C: body中添加json的提交数据
&第2,第3点为 第2点接口测试的步骤。
阅读(...) 评论()问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
想这样设计服务端Api如
PUT products/1
PATCH products/1/status
DELETE products/1
但同事说不要用PUT PATCH DELETE, 统一用POST, 因为网络中很多代理可能不支持PUT PATCH DELETE, 于是导致不能成功调用接口。
想问一下给App开发restful接口, 到底能不能使用PUT PATCH DELETE?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
能用除了GET和POST的其它方法,但是不是用了这些方法就是REST了,REST有明确的规范。
App 处理的不是资源,比如登录注册发帖子下订单这类东西都是业务逻辑,我个人不建议用 restful 来做。
REST规范中明确规定,处理的是资源(或者实体),而不是动作。换句话说,REST处理的是books或者animals这种东西,而login之类的业务逻辑是动作,不适用REST。
restful 可以看做 orm 的 web api 形式,也就是说,资源指的是数据库里面的表(或者表的连接),或者是你nosql数据库里面的对象。当调用者需要并且有权直接操作它们,或者是以表的粒度操作数据库,才需要使用 restful。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以用的。最开始我们也是只用POST GET 后来慢慢增加了 DELETE PUT 等。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你说对几个http方法是http1.1中定义的,1.0只有get post,支持不支持全看web服务端,而浏览器大部分是支持的毕竟1.1协议有年头了,至于代理服务器这个有可能不支持,不过不支持可以换其他代理啊,连1.1都不支持未来2.0岂不
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:Yii2 RESTful中api的使用及开发实例详解
作者:白狼
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Yii2 RESTful中api的使用及开发实例详解的相关资料,需要的朋友可以参考下
什么是RESTful风格的API
对于各种客户端设备与服务端的通信,我们往往都通过API为客户端提供数据,提供某种资源。关于RESTful的概念,一查一大推,一两句也解释不清,姑且先按照我们通俗的理解:在众多风格、众多原则的API中,RESTful就是一套比较优秀的接口调用方式。
Yii2如何实现RESTful风格的API
1、建立单独的应用程序
为了增加程序的可维护性,易操作性,我们选择新建一套应用程序,这也是为了和前台应用、后台应用区分开操作。有些人要嚷嚷了,为啥非得单独搞一套呢?如果你就单纯的提供个别的几个h5页面的话,那就没有必要了,但事实往往是客户端要升级啊,要增加不同的版本啊,这就需要我们不但要后端不仅要增加一套单独的应用程序,我们还要增加各种版本去控制。
在WEB前端(frontend)和后端(backend)的同级目录,新建一个文件夹,命名api,其目录结构如下所示:
├─assets
│ AppAsset.php
├─config
│ bootstrap.php
│ main-local.php
│ main.php
│ params-local.php
│ params.php
├─runtime
│ index.php
├─assets
可以看出其目录结构基本上同backend没有其他差异,因为我们就是拷贝backend项目,只是做了部分优化。
2、为新建的api应用程序美化路由
首先保证你的web服务器开启rewrite规则,细节我们就不说了,不过这是前提。
接着配置api/config/main.php文件
'components' =& [
// other config
'urlManager' =& [
'enablePrettyUrl' =& true,
'showScriptName' =& false,
'enableStrictParsing' =&true,
'rules' =& [],
最后只需要在应用入口同级增加.htaccess文件就好,我们以apache为例
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
RewriteRule \.svn\/ /404.html
RewriteRule \.git\/ /404.html
3、利用gii生成测试modules
用了便于演示说明,我们新建一张数据表goods表,并向其中插入几条数据。
CREATE TABLE `goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `goods` VALUES ('1', '11111');
INSERT INTO `goods` VALUES ('2', '22222');
INSERT INTO `goods` VALUES ('3', '333');
INSERT INTO `goods` VALUES ('4', '444');
INSERT INTO `goods` VALUES ('5', '555');
接着我们先利用gii生成modules后,再利用gii模块,按照下图中生成goods信息
现在,我们的api目录结构应该多个下面这几个目录
├─models
│ Goods.php
├─modules
│ │ Module.php
│ ├─controllers
│ │ DefaultController.php
│ │ GoodsController.php
│ └─views
│ └─default
│ index.php
4、重新配置控制器
为了实现restful风格的api,在yii2中,我们需要对控制器进行一下改写
namespace api\modules\v1\
use yii\rest\ActiveC
class GoodsController extends ActiveController
public $modelClass = 'api\models\Goods';
5、为Goods配置Url规则
'rules' =& [
'class' =& 'yii\rest\UrlRule',
'controller' =& ['v1/goods']
6、模拟请求操作
经过上面几个步骤,到此我们已经为goods成功创建了满足restful风格的api了。为了更好更方便的演示,我们借助工具postman进行模拟请求。
为了见证一下我们的操作,我们用postman请求一下GET /v1/goods看看结果如何:
从上面截图中可以清楚的看到,GET /v1/goods 已经能够很方便的获取我们表中的数据了。
当然,yii2还对该api封装了如下操作:
GET /users: 逐页列出所有用户
HEAD /users: 显示用户列表的概要信息
POST /users: 创建一个新用户
GET /users/123: 返回用户 123 的详细信息
HEAD /users/123: 显示用户 123 的概述信息
PATCH /users/123 and PUT /users/123: 更新用户123
DELETE /users/123: 删除用户123
OPTIONS /users: 显示关于末端 /users 支持的动词
OPTIONS /users/123: 显示有关末端 /users/123 支持的动词
不信的话我们可以利用postman发送一个post请求到/v1/goods,我们会发现成功创建了一个新的商品。
需要提醒的是,操作中还请细心且注意:
如果你的控制器末端不是复数(比如是blog非blogs)请保证请求的时候是复数!这是因为在RESTful架构中,网址中只能有名词而不能包含动词,名词又往往与数据表相对应,数据表呢又是一个“集合”,因此该名词往往是复数的形式。
7、关于授权认证
为什么需要授权认证?这在一般的操作中是需要的。比如说用户要设置自己的信息。
为了对yii2 restful授权认证说的更清楚,我们将会以两个两种不同的方法进行说明。
首先需要开启认证:
假设我们已经按照第3步创建了包含字段access-token的数据表user,而且利用gii上生成了相应的model和controller
配置main.php文件
'components' =& [
'user' =& [
'identityClass' =& 'common\models\User',
'enableAutoLogin' =& true,
'enableSession'=&false
为控制器配置authenticator行为指定认证方式
namespace api\modules\v1\
use yii\rest\ActiveC
use yii\helpers\ArrayH
use yii\filters\auth\QueryParamA
class UserController extends ActiveController
public $modelClass = 'api\models\User';
public function behaviors() {
return ArrayHelper::merge (parent::behaviors(), [
'authenticator' =& [
'class' =& QueryParamAuth::className()
最后我们还需要在identityClass中实现findIdentityByAccessToken方法
public static function findIdentityByAccessToken($token, $type = null)
return static::findOne(['access_token' =& $token, 'status' =& self::STATUS_ACTIVE]);
如此一来,我们先通过postman模拟不带access-token请求看结果
"name": "Unauthorized",
"message": "You are requesting with an invalid credential.",
"code": 0,
"status": 401,
"type": "yii\\web\\UnauthorizedHttpException"
提示401 我们没有权限访问!
我们在请求的链接上携带正确的access-token,认证通过后,控制器会再继续执行其他检查(频率限制、操作权限等),才可以返回正确的用户信息。
需要提醒的是:通过url的形式对access-token传递存在一定的风险,有可能会造成数据的泄漏!一般而言,access-token需要放到HTTP头中进行传递!除非客户端的请求是jsonp格式的!
8、速率限制
速率限制,该操作完全也是出于安全考虑,我们需要限制同一接口某时间段过多的请求。
速率限制默认不启用,用启用速率限制,yii\web\User::identityClass 应该实现yii\filters\RateLimitInterface,也就是说我们的common\models\User.php需要实现yii\filters\RateLimitInterface接口的三个方法,具体代码可参考:
use yii\filters\RateLimitI
use yii\web\IdentityI
class User extends ActiveRecord implements IdentityInterface, RateLimitInterface
// other code ......
// 返回某一时间允许请求的最大数量,比如设置10秒内最多5次请求(小数量方便我们模拟测试)
public function getRateLimit($request, $action){
return [5, 10];
// 回剩余的允许的请求和相应的UNIX时间戳数 当最后一次速率限制检查时
public function loadAllowance($request, $action){
return [$this-&allowance, $this-&allowance_updated_at];
// 保存允许剩余的请求数和当前的UNIX时间戳
public function saveAllowance($request, $action, $allowance, $timestamp){
$this-&allowance = $
$this-&allowance_updated_at = $
$this-&save();
需要注意的是,你仍然需要在数据表User中新增加两个字段
allowance:剩余的允许的请求数量
allowance_updated_at:相应的UNIX时间戳数
在我们启用了速率限制后,Yii 会自动使用 yii\filters\RateLimiter 为 yii\rest\Controller 配置一个行为过滤器来执行速率限制检查。
现在我们通过postman请求v1/users再看看结果,会发现在10秒内调用超过5次API接口,我们会得到状态为429太多请求的异常信息。
"name": "Too Many Requests",
"message": "Rate limit exceeded.",
"code": 0,
"status": 429,
"type": "yii\\web\\TooManyRequestsHttpException"
9、关于版本
为了兼容历史版本而且考虑向后兼容性,我们在一开始操作的时候就以URL的方式实现了版本话,这里就不再进行阐述了。
10、错误处理
Yii的REST框架的HTTP状态代码可参考如下就好,没啥好说的
200: OK。一切正常。
201: 响应 POST 请求时成功创建一个资源。Location header 包含的URL指向新创建的资源。
204: 该请求被成功处理,响应不包含正文内容 (类似 DELETE 请求)。
304: 资源没有被修改。可以使用缓存的版本。
400: 错误的请求。可能通过用户方面的多种原因引起的,例如在请求体内有无效的JSON 数据,无效的操作参数,等等。
401: 验证失败。
403: 已经经过身份验证的用户不允许访问指定的 API 末端。
404: 所请求的资源不存在。
405: 不被允许的方法。 请检查 Allow header 允许的HTTP方法。
415: 不支持的媒体类型。 所请求的内容类型或版本号是无效的。
422: 数据验证失败 (例如,响应一个 POST 请求)。 请检查响应体内详细的错误消息。
429: 请求过多。 由于限速请求被拒绝。
500: 内部服务器错误。 这可能是由于内部程序错误引起的。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 http restful接口开发 的文章

 

随机推荐