我正在构build一个将在服务器上托pipe的应用程序。 我想为应用程序构build一个API,以促进从任何平台(Web应用程序,移动应用程序)的交互。 我不理解的是,当使用REST API时,我们如何validation用户。 例如,当用户已经login,然后想要创build一个论坛主题。 我如何知道用户已经login?
目前正在做一些考试,我正在努力通过一些概念。 这些在我的笔记中都被“提及”了,但我并不真正了解它们是如何联系在一起的。 据我的理解是: SOA–使服务消费者/提供者进行通信的解决scheme。 (据我所知这是所有其他的总称) WSDL – 描述提供者服务的语言。 SOAP – 服务用来发送消息的XML协议“包装器”。 与WSDL一起工作以提供参数? REST – 一种类似于SOAP的devise模式,但是避免了XML? (真的不知道这个) JSON – 使用JavaScript的XML的替代品? (不知道这个或者) 在互联网环顾四周,似乎没有一个清楚的定义,所有这些是什么以及如何相互链接。
在REST风格的Web服务中对资源进行批量操作的devise模式是什么? 我试图在性能和稳定性方面在理想与现实之间取得平衡。 我们现在有一个API,其中所有的操作都可以从列表资源(即GET / user)或单个实例(PUT / user / 1,DELETE / user / 22等)中检索。 有些情况下,你想更新一整套对象的单个字段。 来回发送每个对象的整个表示来更新一个字段是非常浪费的。 在RPC风格的API中,可以有一个方法: /mail.do?method=markAsRead&messageIds=1,2,3,4… etc. 这里的REST是什么? 或者现在和之后妥协是可以的。 它是否破坏devise,添加一些特定的操作,真正提高性能等? 所有情况下,客户端现在是一个Web浏览器(客户端的JavaScript应用程序)。
我读了这个发送曲奇curl的作品,但不适合我 我有一个REST端点 class LoginResource(restful.Resource): def get(self): print(session) if 'USER_TOKEN' in session: return 'OK' return 'not authorized', 401 当我尝试访问 curl -v -b ~/Downloads/cookies.txt -c ~/Downloads/cookies.txt http://127.0.0.1:5000/ * About to connect() to 127.0.0.1 port 5000 (#0) * Trying 127.0.0.1… * connected * Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.27.0 > […]
我想用以下scheme的适当方法devise我的rest端点。 有一个组。 每个组都有一个状态。 该组可以由pipe理员激活或取消激活。 我应该如何devise我的终点? PUT /groups/api/v1/groups/{group id}/status/activate 要么 PATCH /groups/api/v1/groups/{group id} with request body like {action:activate|deactivate}
这个问题以前可能有人问过,但是没有得到明确的答复。 如何在改造请求的正文中发布原始整个JSON? 在这里看到类似的问题 或者是这个答案正确的,它必须是formsURL编码,并作为一个字段传递 ? 我真的希望不要,因为我连接的服务只是期望在post正文中的原始JSON。 他们没有设置为查找JSON数据的特定字段。 我只想和其他人一起澄清这个问题。 一个人回答不要使用Retrofit。 另一个不是确定的语法。 另一个认为是可以做的,但只有当它的formsurl编码和放置在一个领域(这是不能接受的在我的情况)。 不,我无法重新编码我的Android客户端的所有服务。 是的,在主要的项目中发布原始JSON而不是传递JSON内容作为字段属性值是非常常见的。 让我们把它正确的,继续前进。 有人可以指向显示如何完成的文档或示例吗? 或者提供一个可以/不应该做的正当理由。 更新:有一件事我可以100%确定地说。 你可以在Google的排球中做到这一点。 它是build立在英寸我们可以做到这一点在改造?
在创buildREST API时,API中是否有命名约定或实际标准(例如:URL端点path组件,查询string参数)? 骆驼帽是常态还是下划线? 其他? 例如: api.service.com/helloWorld/userId/x 要么 api.service.com/hello_world/user_id/x 注意:这不是RESTful APIdevise的问题,而是用于最终path组件和/或查询string参数的命名约定指南。 任何指导方针将不胜感激。
在研究一些networking服务的同时,我遇到了微软称之为OData的 “新”技术。 阅读OData的常见问题描述,我很难区分OData和REST-ful web服务。 有人能帮我理解差异吗?
概观 我正在为我的应用程序创build一个(REST)API。 初始/主要目的是供移动应用程序(iPhone,Android,Symbian等)使用。 我一直在寻找不同的机制来validation和授权基于networking的API(通过学习其他实现)。 我的头脑里缠绕着大部分的基本概念,但仍然在一些领域寻找指导。 我想做的最后一件事是重新发明轮子,但是我没有find符合我的标准的标准解决scheme(但是我的标准被误导了,所以也可以随意批评)。 另外,我希望API对于所有使用它的平台/应用程序都是一样的。 OAuth的 我会继续向oAuth抛出我的反对意见,因为我知道这可能是提供的第一个解决scheme。 对于移动应用程序(或更具体的非Web应用程序),将应用程序(转到Web浏览器)进行身份validation似乎是错误的。 此外,浏览器无法(我知道)将callback函数返回给应用程序(特别是跨平台)。 我知道有几个应用程序可以这样做,但是它只是感觉不对而且在应用程序用户体验(UX)方面有所突破。 要求 用户input用户名/密码到应用程序。 每个API调用都由调用应用程序标识。 开销保持在最低限度,对于开发者来说,authentication方面是直观的。 该机制对于最终用户(他们的login凭证不公开)以及开发者(他们的应用凭证不公开)是安全的。 如果可能的话,不要求https(绝不是硬性要求)。 我现在的执行思路 外部开发人员将请求一个API帐户。 他们将收到apikey和apisecret。 每个请求至less需要三个参数。 apikey – 在注册时给予开发者 时间戳 – 双倍作为给定apikey的每个消息的唯一标识符 散列 – 时间戳+ apisecret的散列 apikey需要识别发出请求的应用程序。 时间戳的作用类似于oauth_nonce,并避免/减轻重放攻击。 哈希确保请求实际上是从给定apikey的所有者发出的。 对于通过身份validation的请求(代表用户完成的),我仍然不确定要使用access_token路由还是用户名和密码哈希组合。 无论哪种方式,在某个时候,用户名/密码组合将是必需的。 所以当它的时候,会使用几条信息(apikey,apisecret,timestamp)和密码的散列。 我喜欢这方面的反馈意见。 仅供参考,他们将不得不先散列密码,因为我不存储密码在我的系统没有散列。 结论 仅供参考,这不是一个如何构build/构buildAPI的请求,而只是如何处理来自应用程序中的validation和授权。 随机思考/奖金问题 对于仅需要apikey作为请求一部分的API,如何防止除apikey所有者以外的人能够看到apikey(由于发送明文),并提出过多的请求来推动他们超出使用限制? 也许我只是在想这个,但是不应该有什么东西来validation一个请求被apikey所有者validation了吗? 在我的情况下,这是apisecret的目的,它不会被显示/传输没有被哈希。 说到哈希,md5 vs hmac-sha1呢? 当所有的数据都用足够长的数据(即apisecret)进行散列时,真的很重要吗? 我以前曾经考虑添加每个用户/行盐到我的用户密码哈希。 如果我这样做,那么应用程序如何能够在不知道所使用的盐的情况下创build一个匹配的哈希?
我有一个REST Web服务,当前公开此URL: HTTP://服务器/数据/媒体 用户可以在其中发布以下JSON: { "Name": "Test", "Latitude": 12.59817, "Longitude": 52.12873 } 以创build新的媒体元数据。 现在我需要能够与媒体元数据同时上传文件。 什么是这样做的最好方法? 我可以引入一个名为file和base64的新属性,但是我想知道是否有更好的方法。 也有使用multipart/form-data如HTML表单将发送,但我使用REST Web服务,我想坚持使用JSON,如果可能的话。