我听说过许多Web API,例如Facebook,Twitter等,它们可以帮助第三方访问和操纵数据。我想知道Web API的工作原理。Web API的基础知识是什么?
如果我想为我的网站创建一个API,以便人们可以访问或更新它,那么我首先需要做什么?
我听说过许多Web API,例如Facebook,Twitter等,它们可以帮助第三方访问和操纵数据。我想知道Web API的工作原理。Web API的基础知识是什么?
如果我想为我的网站创建一个API,以便人们可以访问或更新它,那么我首先需要做什么?
Answers:
最简单的方法是,创建一组GET / POST请求,任何人都可以调用该请求,并将其发布在URL,参数和效果上。GET请求为只读任务,而POST请求为将更改服务器上数据的任何内容。
如果需要,添加身份验证系统,您将拥有一个简单的Web API。
一个网页API仅仅是一个接口,允许进入你的系统(如网站)通过标准的HTTP请求方法。数据本身通常以某种标准格式(例如JSON或XML)包装,以使其易于处理。
这是“ TextWise” 的示例 Web API
我实际上正在为我公司的虚拟化平台开发API。您可以通过几种不同的方式使用它们,但是我最喜欢的(也是使人们可以理解的最快方法)是使用简单的HTTP GET请求并返回JSON响应。
我的网址看起来像这样:
domain.com/method/call/subcall?key=key&data=something
然后,我分解HTTP GET变量,并执行调用者希望使用它们进行的操作。我注册成为Beta Exchange用户参加Stack Exchange API开发的最大原因之一是,我知道这将是一次绝佳的学习经历,而且确实如此。
通常,我返回两个JSON编码的数组,一个为result
,它基本上只是说出调用是否成功,否则返回错误代码/错误字符串。另一个通常称为data
,其内容在该特定调用的文档中进行了描述。此外,基于GET的API更加容易测试和调试。
存在许多其他格式,例如SOAP / XMLRPC,我只是发现选择JSON给了我令人难以置信的简单性和选择自由。
例如,如果我需要发送很多字段并且不想处理大量的GET变量,则可以这样做(PHP中的示例)
$to_send = base64_encode(json_encode($some_array));
另一方面,它很容易解码,使我可以使用许多变量,同时仍仅通过API接受2-3个GET变量。
我只是试图使我的方法和调用简短而简洁,并以这样的方式设计它:每次调用返回一个统一的“工作或失败”响应,然后返回所请求的数据。
这实际上是一个非常广泛的问题。从最基本的意义上讲,当客户端(例如Web浏览器)向Web服务器发出某种HTTP请求时,Web API才起作用。服务器检查该请求以找出用户想要的内容,然后以某种格式(例如页面)返回数据,然后客户端检查该数据以获取所需的内容。这些只是Web API唯一的共同点。我意识到这并不能真正回答您的问题,但是我想给出一个问题如此广泛的原因。
客户端可以采用多种方式来格式化其请求,或者服务器可以格式化其响应,因此,为了使其中的任何一种有意义,客户端和服务器必须就一些基本规则达成共识。一般来说,如今有两种非常通用的样式可用于此类事情。
远程过程调用(RPC)
在RPC样式的API中,整个API通常只有一个URL。您可以通过发布某种类型的文档来调用它,该文档包含有关您要执行的操作的信息,服务器将返回具有所需内容的文档。用一般的计算术语来说,请求文档通常具有一个函数名称和一些自变量。
这种API的一些标准包括XML-RPC和SOAP。这些标准试图创建一种可用于描述您正在进行的函数调用甚至描述整个API的格式。
代表性状态转移(REST)
在REST风格的API中,您没有太多的API URL作为名称空间:服务器或服务器中的文件夹,其中驻留了许多不同的对象,并且该命名空间中的每个URL都成为一部分API。URL不会告诉服务器您要使用API,而是告诉服务器要在API 上使用什么。然后,您使用的HTTP方法,以及可能的请求体,说明你想要做什么,以该对象:GET(检索的东西已经存在),POST(创建新的东西),PUT(替换的东西已经存在),或者删除(删除已经存在的东西)。您还可以使用其他一些动词,但这些动词是迄今为止最常见的动词。
到目前为止,我还没有提到REST的标准格式。从理论上讲,您几乎可以使用任何格式。HTTP已经提供了您要执行的操作以及您要执行的操作的信息,因此请求正文的格式几乎可以是任何形式:您要创建或替换的对象的某种表示形式。但是实际上,REST的作者总是倾向于就一种格式达成共识,因为很难理解每种可能的格式。