标签: api

自定义Authorization HTTP标头

我需要在向API发送请求时对客户端进行身份验证.客户端有一个API令牌,我正在考虑使用标准Authorization头将令牌发送到服务器.

通常,此标头用于BasicDigest身份验证.但我不知道是否允许自定义此标头的值并使用自定义身份验证方案,例如:

Authorization: Token 1af538baa9045a84c0e889f672baf83ff24
Run Code Online (Sandbox Code Playgroud)

你会推荐这个吗?或者是否有更好的方法来发送令牌?

api rest authorization http http-headers

80
推荐指数
3
解决办法
10万
查看次数

REST API - 在单个请求中批量创建或更新

让我们假设有两个资源Binder,并Doc具有关联关系意味着DocBinder自己站.Doc可能属于也可能不属于BinderBinder可能为空.

如果我想设计一个REST API,允许用户发送一个Docs 的集合,在单个请求中,如下所示:

{
  "docs": [
    {"doc_number": 1, "binder": 1}, 
    {"doc_number": 5, "binder": 8},
    {"doc_number": 6, "binder": 3}
  ]
}
Run Code Online (Sandbox Code Playgroud)

对于每个文档docs,

  • 如果doc存在则将其分配给Binder
  • 如果doc不存在,请创建它然后分配它

我真的很困惑这应该如何实现:

  • 使用什么HTTP方法?
  • 必须返回什么响应代码?
  • 这甚至适合REST吗?
  • URI怎么样?/binders/docs
  • 处理批量请求,如果一些项目引发错误但另一个项目通过该怎么办.必须返回什么响应代码?批量操作应该是原子的吗?

api rest

80
推荐指数
4
解决办法
8万
查看次数

从纬度经度查找时区

是否有可以从纬度/经度转换为时区的库(甚至更好的Web服务)?

api timezone web-services geocoding

79
推荐指数
6
解决办法
9万
查看次数

如何使用继承建模RESTful API?

我有一个对象层次结构,我需要通过RESTful API公开,我不确定我的URL应该如何构建以及它们应该返回什么.我找不到任何最佳做法.

假设我有继承动物的狗和猫.我需要对狗和猫进行CRUD操作; 我也希望能够对动物进行一般操作.

我的第一个想法是做这样的事情:

GET /animals        # get all animals
POST /animals       # create a dog or cat
GET /animals/123    # get animal 123
Run Code Online (Sandbox Code Playgroud)

问题是/ animals集合现在"不一致",因为它可以返回并获取不具有完全相同结构的对象(狗和猫).将集合返回具有不同属性的对象,它被认为是"RESTful"吗?

另一个解决方案是为每个具体类型创建一个URL,如下所示:

GET /dogs       # get all dogs
POST /dogs      # create a dog
GET /dogs/123   # get dog 123

GET /cats       # get all cats
POST /cats      # create a cat
GET /cats/123   # get cat 123
Run Code Online (Sandbox Code Playgroud)

但现在狗和猫之间的关系就失去了.如果想要检索所有动物,必须查询狗和猫的资源.每个新的动物子类型的URL数量也会增加.

另一个建议是通过添加以下内容来扩充第二个解决方案:

GET /animals    # get common attributes of all animals
Run Code Online (Sandbox Code Playgroud)

在这种情况下,返回的动物将仅包含所有动物共有的属性,丢弃特定于狗的属性和特定于猫的属性.这允许检索所有动物,尽管细节较少.每个返回的对象都可以包含指向详细的具体版本的链接.

有什么意见或建议吗?

api rest polymorphism inheritance

79
推荐指数
2
解决办法
2万
查看次数

如何注销我使用OAuth2登录谷歌的应用程序?

在我的应用程序中,我使用jsapi实现了Google注销.

我使用网址https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx连接到Google,然后通过https://www.googleapis.com/plus/v1/people/xxxxxx获取用户数据来自谷歌个人资料.

现在,我需要在点击应用程序中的按钮时从Google注销用户.如何在JavaScript中实现此功能,或者至少每次用户登录时都必须询问Google登录页面.

我试过了approval_prompt=force,但似乎没有工作.

javascript api oauth-2.0

79
推荐指数
3
解决办法
9万
查看次数

Openstreetmap:在网页中嵌入地图(如谷歌地图)

有没有办法在页面中嵌入/混搭OpenStreetMap(就像Google Maps API的工作方式一样)?

我需要在页面内部显示带有一些标记的地图,并允许拖动/缩放,可能是路由.我怀疑会有一些Javascript API,但我似乎无法找到它.

搜索为我提供了访问原始地图数据API,但这似乎更适合地图编辑; 此外,使用它对AJAX来说是一项繁重的任务.

javascript api maps openstreetmap

78
推荐指数
7
解决办法
10万
查看次数

RESTful API运行时可发现性/ HATEOAS客户端设计

对于我参与的SaaS创业公司,我正在构建一个RESTful Web API和几个使用它的不同平台上的客户端应用程序.我想我已经找到了API,但现在我转向客户了.正如我一直在阅读关于REST的内容,我发现 REST的一个关键部分是发现,但是对于发现的真正含义的两种不同解释似乎存在很多争论:

  1. 开发人员发现:开发人员将大量API详细信息硬编码到客户端,例如资源URI,查询参数,支持的HTTP方法以及他们通过浏览文档和试验API响应而发现的其他详细信息.这种类型的发现IMHO需要很酷的链接和API版本问题,并导致客户端代码与API的硬耦合.似乎没有比使用详细记录的RPC集合好多少.

  2. 运行时发现 - 客户端应用程序本身能够在很少或没有带外信息的情况下找出所需的一切(可能只是对API处理的媒体类型的了解.)链接可能很热.但是为了使API非常高效,似乎需要大量的查询参数链接模板,这会使带外信息重新出现.由于我还没有,我可能还有其他的困难.在发展中得到了这一点.但我确实喜欢松耦合的想法.

运行时发现似乎是REST的圣杯,但我看到很少讨论如何实现这样的客户端.几乎所有我发现的REST源似乎都假设开发人员发现.有人知道一些运行时发现资源吗?最佳做法?具有实际代码的示例或库?我正在为一个客户端使用PHP(Zend Framework).另一个是Objective-C(iOS).

鉴于开发人员社区中目前的一系列工具和知识,运行时发现是否是一个现实的目标?我可以编写我的客户端以不透明的方式处理所有URI,但如何最有效地执行此操作是一个问题,尤其是在低带宽连接上.无论如何,URI只是等式的一部分.如何在运行时上下文中链接模板?除了提出大量的OPTIONS请求之外,如何传达支持哪些方法呢?

api rest discovery hateoas

77
推荐指数
5
解决办法
2万
查看次数

为什么要使用API​​密钥和秘密?

我遇到了许多API,它们为用户提供了API 密钥秘密.但我的问题是:两者之间有什么区别?

在我看来,一把钥匙就足够了.说我有一把钥匙,只有我和服务器知道它.我用这个键创建一个HMAC哈希并进行API调用.在服务器上,我们再次创建HMAC哈希并将其与发送的哈希进行比较.如果相同,则对呼叫进行身份验证.

那为什么要用两把钥匙?

编辑:或者是用于查找API密钥的API密钥?

security authentication api api-key secret-key

77
推荐指数
5
解决办法
3万
查看次数

什么是Leaflet和Mapbox,它们的区别是什么?

什么是Leaflet和Mapbox,两者的区别或用途是什么?他们的API有哪些主要区别?

api dictionary leaflet mapbox

77
推荐指数
3
解决办法
4万
查看次数

什么是与API相关的回调网址?

我一直在网上搜索,似乎无法绕过回调网址的想法.在我的情况下,我有一些我必须自己定义的回调URL.一个流行的是"默认回调URL".这究竟是什么?你能用简单的英语举个例子吗?

api callbackurl

77
推荐指数
7
解决办法
10万
查看次数