API

如何设计一个牛逼的API接口

在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?我们应该考虑哪些问题?…

    

RESTful API设计 最佳实践。

设计HTTP和RESTful API可能很棘手,因为没有官方和强制标准。基本上,有许多方法可以实现API,但其中一些已在实践中得到证实,并且已被widley采用。这篇文章介绍了构建HTTP和RESTful API的最佳实践。我们将讨论URL结构,HTTP方法,创建和更新资源,设计关系,有效负载格式,分页,版本控制等等。

RESTful API设计。 坚果壳中的最佳实践。

更新2018年

我完全重写了这篇文章。我重新访问并扩展了现有的部分并添加了许多新的部分:HTTP方法和状态代码的新概述,PATCH,清除PUT和POST的语义,data字段,设计关系,REST与RPC风格的API,可演化性,版本控制方法,基于键集分页,JSON:API,JSON:API启发的有效负载格式。…

        

API设计指南

大多数现代Web应用程序都公开了客户端可用于与应用程序交互的API。精心设计的Web API应旨在支持:

  • 平台独立性无论API如何在内部实施,任何客户端都应该能够调用API。这需要使用标准协议,并且具有客户端和Web服务可以就要交换的数据格式达成一致的机制。
  • 服务发展Web API应该能够独立于客户端应用程序进化和添加功能。随着API的发展,现有的客户端应用程序应该继续运行而无需修改。应该可以发现所有功能,以便客户端应用程序可以完全使用它。

本指南介绍了在设计Web API时应考虑的问题。

REST简介

2000年,Roy Fielding提出了Representational State Transfer(REST)作为设计Web服务的架构方法。REST是一种用于构建基于超媒体的分布式系统的架构风格。REST独立于任何底层协议,不一定与HTTP绑定。但是,大多数常见的REST实现都使用HTTP作为应用程序协议,本指南重点介绍如何为HTTP设计REST API。

REST over HTTP的主要优点是它使用开放标准,并且不会将API或客户端应用程序的实现绑定到任何特定实现。例如,REST Web服务可以用ASP.NET编写,客户端应用程序可以使用任何可以生成HTTP请求和解析HTTP响应的语言或工具集。

以下是使用HTTP的RESTful API的一些主要设计原则:

  • REST API是围绕资源设计的,资源是客户端可以访问的任何类型的对象,数据或服务。
  • 资源具有标识符,该
        

RESTful API 最佳实践

RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。

它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

一、URL 设计

1.1 动词 + 宾语

RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。比如,GET /articles这个命令,GET是动词,/articles是宾语。

动词通常就是五种 HTTP 方法,对应 CRUD 操作。

  • GET:读取(Read)
  • POST:新建(Create)
  • PUT:更新(Update)
  • PATCH:更新(Update),通常是部分更新
  • DELETE:删除(Delete)

根据 HTTP 规范,动词一律大写。

        

人人都是 API 设计师:我对 RESTful API、GraphQL、RPC API 的思考

有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设计的思考。首先,为什么写这个话题呢?其一,我阅读了《阿里研究员谷朴:API 设计最佳实践的思考》一文后受益良多,前两天并转载了这篇文章也引发了广大读者的兴趣,我觉得我应该把我自己的思考整理成文与大家一起分享与碰撞。其二,我觉得我针对这个话题,可以半个小时之内搞定,争取在 1 点前关灯睡觉,哈哈。

现在,我们来一起探讨 API 的设计之道。我会抛出几个观点,欢迎探讨。

一、定义好的规范,已经成功了一大半

通常情况下,规范就是大家约定俗成的标准,如果大家都遵守这套标准,那么自然沟通成本大大降低。例如,大家都希望从阿里的规范上面学习,在自己的业务中也定义几个领域模型:VO、BO、DO、DTO。其中,DO(Data Object)与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。 而 DTO(Data Transfer Object)是远程调用对象,它是 RPC 服务提供的领域模型。对于 BO(Business Object),它是业务逻辑层封装业务逻辑的对象,一般情况下,它是聚合了多个数据源的复合对象。那么,VO(View Object) 通常是请求处理层传输的对象,它通过 Spring 框架的转换后,往往是一个 JSON 对象。…

            

HTTP API 认证授权方法

我们知道,HTTP是无状态的,所以,当我们需要获得用户是否在登录的状态时,我们需要检查用户的登录状态,一般来说,用户的登录成功后,服务器会发一个登录凭证(又被叫作Token),就像你去访问某个公司,在前台被认证过合法后,这个公司的前台会给你的一个访客卡一样,之后,你在这个公司内去到哪都用这个访客卡来开门,而不再校验你是哪一个人。在计算机的世界里,这个登录凭证的相关数据会放在两种地方,一个地方在用户端,以Cookie的方式(一般不会放在浏览器的Local Storage,因为这很容易出现登录凭证被XSS攻击),另一个地方是放在服务器端,又叫Session的方式(SessonID存于Cookie)。

但是,这个世界还是比较复杂的,除了用户访问,还有用户委托的第三方的应用,还有企业和企业间的调用,这里,我想把业内常用的一些 API认证技术相对系统地总结归纳一下,这样可以让大家更为全面的了解这些技术。注意,这是一篇长文!

本篇文章会覆盖如下技术:

  • HTTP Basic
  • Digest Access
  • App Secret Key + HMAC
  • JWTJSON Web Tokens
  • OAuth 1.0 – 3 legged & 2 legged
  • OAuth 2.0 – Authentication Code & Client Credential
                        

基于JWE的API接口加密方案设计

前言

在这个互联网和移动互联网高速发展的时代,数据安全成了企业的头等大事。数据安全的范畴很大,包含:技术安全、服务安全、存储安全、传输安全等,本文主要是从传输安全的层面,设计一种基于JWE的API加密方案。

名词说明

**JWE **

JSON Web Encryption ,详细资料:http://self-issued.info/docs/draft-ietf-jose-json-web-encryption.html

目录

(一) 安全算法扫盲

(二) 安全方案演变

(三) JWE的介绍

(四) 基于JWE的API加密方案

本文主要讲解相关理论,后续会有实践的更新


(一) 安全算法扫盲

1.信息安全算法

1.1 加密相关算法

现代密码学中,把算法的加密技术主要分为:

单密钥模式

双密钥模式

无密钥模式

单密钥模式,也称为对称密钥模式,加密和解密方采用同一个密钥。采用这种模式的算法就叫做对称加密算法。

双密钥模式,也称作非对称密钥模式,加密和解密方采用不同的密钥。采用这种模式的算法就叫做非对称加密算法。

无密钥模式,也称作随机密钥模式,每次的密钥都是随机生成,使用一次之后失效。这是一种理想的加密模式,由于设计难度大,目前未得到广泛应用。

本文中主要针对前两类加密算法进行简单介绍。

1.1.1 对称加密算法(Symmetric Encryption)

对称加密算法,又称私钥加密算法,顾名思义加密和解密过程中只用到一个密钥,该密钥也称作私钥。

常见的对称加密算法有:DES、IDEA(基于DES)、3DES(基于DES)、RC4、RC5、RC6、AES。

特点

Feature

            

关于 php json API接口开发的注意问题

关于 php json接口开发的注意问题

一是注意跨域问题.需要加 Access-Control-Allow-Origin:*  http头.(针对于前端浏览器脚本调用接口)

二是如果请求的header里  Content-Type: 是 application/json,则需要用 file_get_contents("php://input");接收.如果用 swoole 框架的话,需要用$request->rawContent()接收.

如果请求header里Contente-Type是 multipart/form-data,或application/x-www-form-urlencoded或application/octet-stream
则需要用 $_POST($_GET)或$_FILES来接收.

Ps :js 代码调用接口示例如下

1.要加contentType: "application/json; charset=utf-8",

2.需要使用JSON.stringify 转换json对象或把对象转为字符形式,如'{"aa":22}'(json两边加单引号)

var submit_sync = function() {  
    $.ajax({  
        type: "post",  
        url: 'add-post-json.php',