我正在使用java enterprise和glassfish构建一个应用程序.客户端和服务器之间的信息通常是少量数据,但客户端有时需要获得更大的资源(典型值为1-20 MB).我仍然在计划系统的体系结构,我需要一些关于如何将服务器上的资源暴露给多个客户端的建议.
最初我只是在javaws和glassfish提供的ACC中运行桌面客户端应用程序.我将远程接口放在一个单独的jar中,并计划通过调用通过这些接口公开的EJB方法来完成所有客户端服务器接口.这对于Java桌面客户端来说都很好.对于Android客户端来说它应该很容易.但我认为它不会像ios一样容易.
有什么办法可以从运行在iphone或ipad中的objective-c调用我的EJB吗?我当然希望如此.
我期待该解决方案是一个RESTful Web服务.据我所知,这是一种通过以通用XML或JSON形式传递数据来松散地耦合客户端和服务器应用程序的方法.
对不起,如果我遗漏了一些非常明显的东西,但似乎有两条路线从这里:
保留我的EJB业务接口,并为通用客户端实现重复的restful接口(iOS以及其他可能在以后出现的其他接口).
为所有客户创建一个restful接口.
2号似乎是一个更清洁的设计,但这意味着我必须废弃已经完成的工作并了解休息.有经验的人可以提供一些建议吗?我非常感激.
我试图找出构建用户与其他实体交互的 URL 的正确 RESTful 方法是什么?
例如,我有三个实体:users、posts和tags。
如何表示“用户喜欢帖子”、“用户关注标签”或“用户关注用户”。
这是我的想法,但我不确定这是否是正确的方法:
POST /user/:id/like/post/:id(用户喜欢帖子)
POST /user/:id/follow/user/:id(用户关注另一个用户)
看起来很语义化,但我不确定 POST 方法
我正在开发一个清理/过滤服务,它有一个方法接收在xml中序列化的对象列表,并应用一些过滤规则来返回这些对象的子集.
在REST-ful服务中,我应该使用什么动词来表示这种方法?我认为GET是一个很自然的选择,但是我必须将序列化的XML放在请求的主体中,但有效但感觉不正确.其他动词似乎不符合语义.
定义Service接口的好方法是什么?命名资源/清理或/过滤器似乎很奇怪主要是因为在我看到的在线示例中,它始终是名称而不是用于资源名称的动词.
Am I right to feel that REST services are better suited for CRUD operations and you start bending the rules in situations like this service? If yes, am I then making a wrong architectural choice.
I've pushed to develop this service in REST-ful style (as opposed to SOAP) for simplicity, but such awkward cases happen a lot and make me feel like I am missing something. Either choosing REST where it shouldn't be used or may be …
所以,我已经能够让安静的控制器工作了
Route::controller('users','UserController');
class UserController extends BaseController {
public function getAccount(){}
}
Run Code Online (Sandbox Code Playgroud)
所以/users/account工作.但是,如果我尝试做类似的事情
Route::any('account',array('as' => 'account','uses' => 'UserController@account'));
Run Code Online (Sandbox Code Playgroud)
然后去/account,它不起作用(NotFoundHTTPException).有没有办法结合使用命名路由和restful控制器?我喜欢restful系统如何分解请求,以及命名路由如何封装URI并将它们与函数名称分离.这在Laravel 3中有效.我在语法中遗漏了什么,或者Laravel 4是否故意禁止这种混合搭配行为?谢谢...
我试图了解基于资源的RESTful架构.我知道HTTP GET on /accounts会列出帐户,GET on /accounts/123会提供给定帐户的详细信息.如何在RESTful架构中实施主动管理,例如将资金从帐户A转移到帐户B?
我的项目中有很多带有此类注释的控制器
@ApiOperation(value = "description")
@RequestMapping(value = "/{param1}", method = RequestMethod.POST)
public @ResponseBody Response<Map<String, Object>> someMethod(
@ApiParam(name = "param1", value = "about param1", required = true)
@PathVariable("param1") int param1,
@ApiParam(name = "param2", value = "about param2", required = false, defaultValue = "default)
@RequestParam(value = "param2", defaultValue = "default") String param2
){
// ..
}
Run Code Online (Sandbox Code Playgroud)
几乎每种方法都接受通用参数,例如access_token。如果将描述添加到所有方法中,将是不好的解决方案。也许还有其他解决方案?
我发现我可以json使用这样的配置来定义文件,例如:https://github.com/OAI/OpenAPI-Specification/blob/master/fixtures/v2.0/json/resources/reusableParameters.json,但是据我所知我可以使用json或注释。或者,也许我可以以某种方式将它们结合起来?
确定什么是真正的RESTFull应用程序和/或api并不总是很容易,因为对于REpresentational State Transfer架构风格的含义和范围存在一种误解.
最初,我对于什么来说很麻烦,这个形容词"REpresentational"的首字母缩略词REST引用了.这是因为"代表性国家"听起来不太好......
此外,我对这种建筑风格的作者罗伊菲尔丁的博客文章印象深刻,他对基于http动词的api经常出现的误解感到非常失望,特别是他抱怨客户端和客户之间的耦合.这些api的服务器有关其名称和数据结构的信息.
博客文章参考:http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
我想尝试只给出关于REST arch的理论解释.风格,我想知道其他观点.
我正在尝试收集有关 REST 版本控制的信息。当我查看论坛时,最喜欢的似乎是使用Accept标题。但是,如果我查看 StackExchange、Google、Twitter、Yahoo、Instagram 和 eBay 的 API,它们都通过 URI 使用版本控制。
我不明白为什么他们更喜欢这种方式而不是 HTTP 标头。我想知道事实,而不是意见。有人能帮忙吗?
我有一个Lambda函数,它是对API的基本Python GET调用.它在本地工作正常,但是当我上传到Lambda(以及请求库)时,它不会从API调用返回JSON响应.我只是希望它将整个JSON对象返回给调用者.我在这里做了一些根本错误的事情 - 我偶然发现了几篇文章说不支持从Lambda Python函数返回JSON.
这是代码:
import requests
import json
url = "http://url/api/projects/"
headers = {
'content-type': "application/json",
'x-octopus-apikey': "redacted",
'cache-control': "no-cache"
}
def lambda_handler(event, context):
response = requests.request("GET", url, headers=headers)
return response
Run Code Online (Sandbox Code Playgroud)
我的包中包含请求库和dist,以及json库(我不认为它需要这个).返回的错误消息是:
{
"stackTrace": [
[
"/usr/lib64/python2.7/json/__init__.py",
251,
"dumps",
"sort_keys=sort_keys, **kw).encode(obj)"
],
[
"/usr/lib64/python2.7/json/encoder.py",
207,
"encode",
"chunks = self.iterencode(o, _one_shot=True)"
],
[
"/usr/lib64/python2.7/json/encoder.py",
270,
"iterencode",
"return _iterencode(o, 0)"
],
[
"/var/runtime/awslambda/bootstrap.py",
41,
"decimal_serializer",
"raise TypeError(repr(o) + \" is not JSON serializable\")"
]
],
"errorType": "TypeError",
"errorMessage": "<Response [200]> …Run Code Online (Sandbox Code Playgroud) amazon-web-services python-2.7 restful-architecture aws-lambda
我们对商品网站进行了分类,我们没有登录,但用户可以查看其他用户列出的商品.要查看其他用户的详细信息,他们必须提供其联系详细信息.要验证用户是否提供了正确的手机号码,我们会将OTP代码发送回该号码.API流程如下所示:
1)//当用户填写表单以获取特定股票的卖家详细信息时要触及的API(这需要"stockId"和"mobile"作为输入):
POST /api/lead/
{
"stockId":123,
"mobile":9890384328
}
Run Code Online (Sandbox Code Playgroud)
如果"移动"已经过验证,API的响应(响应代码:200):
{
"sellerName": "xyz",
"sellerMobile": "+123232312",
"sellerAddress": "21, park street, new york"
}
Run Code Online (Sandbox Code Playgroud)
如果"移动"尚未验证,则回复(响应代码:403):
{
"OTP verification required. OTP is sent to the mobile number."
}
Run Code Online (Sandbox Code Playgroud)
2)用户在移动设备上收到的OTP再次向同一个引导API发回请求:
{
"sellerName": "xyz",
"sellerMobile": "+123232312",
"sellerAddress": "21, park street, new york",
"otp": 1234
}
Run Code Online (Sandbox Code Playgroud)
如果OTP正确,它会发回卖家详细信息作为回应.如果提供的OTP不正确,则响应为:
{
"Incorrect OTP."
}
Run Code Online (Sandbox Code Playgroud)
我在这个API设计中看到了一些问题:
有人可以建议哪种方法更好吗?
rest ×6
http ×2
android ×1
api ×1
architecture ×1
aws-lambda ×1
ejb ×1
hateoas ×1
ios ×1
java-ee ×1
json ×1
laravel ×1
laravel-4 ×1
python-2.7 ×1
restful-url ×1
swagger-ui ×1
webserver ×1