API 是如何工作的

你们是如何将管理后台和api接口分开的? - CNode技术社区
努力让自己变得更强~
我现在是管理后台的api和pc界面是一个项目, 移动端的api单独一个项目这样分开。
但现在两边都要写sequelize的model, 加表或改字段, 两个项目都要同步一下。求解决办法~
我有一个不成熟的小建议,你可以把model放git子模块下?
那就是分成三个项目,改model时, web和api都要拉一下,对吗
是的。或者你可以将管理后台和api分的彻底一些。所有管理后台对数据操作都是来自api服务。这样是不是也可行?
这样的话, 分离就没有意义了。
git submodule
通过路由区分,底层业务可以通用嘛
不要太纠结,你要知道在java项目中做微服务不知道有多少个项目,照样一个项目需要写一套model。你现在觉得有重复工作不过是因为这两个项目是你一个人负责的,如果是两个人负责谁会在乎别人需不需要再写一遍model。楼上提到的git submodule也是一种方案。如果你非要分项目的话就不要纠结要写两遍model,因为本来就是两个项目了。
有道理。只不过我们老板想用rpc把持久层分开, 我就想不通了。。
之前有人提到过类似的问题,老板要求model层通过rpc调用,但这样的结果是model已经跨物理机器了,不在同一内存中如果访问数据库?
嗯嗯。已经使用git子模块解决了
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的webapi工作方式_中华文本库
非常遗憾!在本库中没有找到与&"webapi工作方式"&相关的文本Microsoft Azure Stack 是 Azure 的扩展 - 将云计算的敏捷性和创新引入本地环境并启用唯一的混合云,使你可以在任何位置构建和部署混合应用程序。我们整合了边缘和云的最佳优势,可在环境中的任何位置提供 Azure 服务。前端是如何管理后端提供的API的? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。828被浏览<strong class="NumberBoard-itemValue" title="7分享邀请回答foo.com,在开发环境,API的地址是
,在产品环境下地址是
,你看,为了区分不同环境,后端API的域名部分就不同,开发环境是
,产品环境是
,在code中硬编码肯定不合适。对于浏览器中执行代码管理API,一个合适的方法是这样,在产生HTML的Web服务器中通过读取一个config(可以是一个config文件,也可以是一个数据库中的config),获得当前环境的API域名,以inline script的方式输出在HTML中,比如产品环境就像这样。&script&
FooConfig.Endpoints = 'api.foo.com';
在代码中,读取FooConfig.Endpoints就获得域名,加上URL路径部分,就是最终的API地址。如何管理API的输入输出格式?API的格式管理很重要,跑通一个API并不难,难的是长时间的管理。工具上,可以有swagger等工具来描述API,文档化API,甚至自动生成API,但是,工具只是用来提高我们的效率,不能代替人。如果人的水平高,那怕是用txt也能够描述好API。真实情况中,开发API的和使用API的是不同的开发者,甚至是不同的开发团队,为了防止来回反复,一个要诀:写code之前先沟通清楚。一个API有实现的一方,还有使用的一方,一个设计好不好,要考虑双方的立场,无论是前端或者后端都不能一言堂决定API怎样。(先写到这里吧,回头再补充)30添加评论分享收藏感谢收起swagger: "2.0"
version: 1.0.0
title: Simple API
description: A simple API to learn how to write OpenAPI Specification
host: simple.api
basePath: /openapi101
它会自动生成一篇排版优美的API文档,与此同时还能生成一个供前端人员使用的 Mock Server。同时,它还能支持根据 Swagger API Spec 生成客户端和服务端的代码。然而,它并不能解决没有人维护文档的问题,并且无法及时地通知另外一方。当前端开发人员修改契约时,后台开发人员无法及时地知道,反之亦然。但是持续集成与自动化测试则可以做到这一点。契约测试:基于持续集成与自动化测试当我们定好了这个 API 的规范时,这个 API 就可以称为是前后端之间的契约,这种设计方式也可以称为『契约式设计』。(定义来自)这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。按传统的『瀑布开发模型』来看,这个契约应该由前端人员来创建。因为当后台没有提供 API 的时候,前端人员需要自己去搭建 Mock Server 的。可是,这个 Mock API 的准确性则是由后台来保证的,因此它需要共同去维护。与其用文档来规范,不如尝试用持续集成与测试来维护 API,保证协作方都可以及时知道。在 2011 年,Martin Folwer 就写了一篇相关的文章:,介绍了相应的测试方式:其步骤如下:编写契约(即 API)。即规定好 API 请求的 URL、请求内容、返回结果、鉴权方式等等。根据契约编写 Mock Server。可以彩 Moco编写集成测试将请求发给这个 Mock Server,并验证如下是我们项目使用的
生成的契约,再通过
来进行 API 测试。[
"description": "should_response_text_foo",
"request": {
"method": "GET",
"uri": "/property"
"response": {
"status": 401,
"message": "Full authentication is required to access this resource"
只需要在相应的测试代码里请求资源,并验证返回结果即可。而对于前端来说,则是依赖于 UI 自动化测试。在测试的时候,启动这个 Mock Server,并借助于 Selenium 来访问浏览器相应的地址,模拟用户的行为进行操作,并验证相应的数据是否正确。当契约发生发动的时候,持续集成便失败了。因此相应的后台测试数据也需要做相应的修改,相应的前端集成测试也需要做相应的修改。因此,这一改动就可以即时地通知各方了。前端测试与 API 适配器因为前端存在跨域请求的问题,我们就需要使用代理来解决这个问题,如 node-http-proxy,并写上不同环境的配置:这个代理就像一个适配器一样,为我们匹配不同的环境。在前后端分离的应用中,对于表单是要经过前端和后台的双重处理的。同样的,对于前端获取到的数据来说,也应该要经常这样的双重处理。因此,我们就可以简单地在数据处理端做一层适配。写前端的代码,我们经常需要写下各种各样的:if(response && response.data && response.data.length & 0){}
即使后台向前端保证,一定不会返回 null 的,但是我总想加一个判断。刚开始写 React 组件的时候,发现它自带了一个名为 PropTypes 的类型检测工具,它会对传入的数据进行验证。而诸如 TypeScript 这种强类型的语言也有其类似的机制。我们需要处理同的异常数据,不同情况下的返回值等等。因此,我之前尝试开发
来解决这样的问题,只是轮子没有造完。诸如 Redux 可以管理状态,还应该有个相应的类型检测及 Adapter 工具。除此,还有一种情况是使用第三方 API,也需要这样的适配层。很多时候,我们需要的第三方 API 以公告的形式来通知各方,可往往我们不会及时地根据这些变化。一般来说这种工作是后台去做代码的,不得已由前端来实现时,也需要加一层相应的适配层。小结总之,API 使用的第一原则:不要『相信』前端提供的数据,不要『相信』后台返回的数据。753 条评论分享收藏感谢收起API有什么作用,他的工作原理是什么?_百度知道
API有什么作用,他的工作原理是什么?
API有什么作用,他的工作原理是什么?工作流程,详细的解释。
我有更好的答案
  API的作用:  1.远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。  2.标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。  3.文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。  4.信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。  原理:  API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
API(Application Programming Interface,应用程序编程接口)详细的可以百度一下
这个我本来不想说的,不过也许你知道其它人不知道,这里为了照顾一下新手,不得不说些废话,请大家谅解。Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。使用Win32 API,应用程序可以充分挖掘Windows的32位操作系统的潜力。Mircrosoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏及接口。使用 Win32 API不但可以开发出在各种平台上都能成功运行的应用程序,而且也可以充分利用每个平台特有的功能和属性。以上为API的相关介绍,不过有些新手看了以后可能还是不怎么明白API到底有什么用?这里请不要着急,如果你有足够耐心的话,请慢慢往下看。二、如何使用API?
估计这才是大家真正关心的,那么如何使用API呢?在了解API之前,先打开你的VB书,翻到过程函数这章来,在搞清楚API之前应该先搞懂过程函数是怎么一回事!如果你还不知道过程的工作方式,那么请先不要急着往下看,那样容易走很多弯路。  好了,当你理解了过程函数时,也就是你可以使用API的时候了,别把API看得太难,你就像使用过程函数一样使用API就可以了。首先,让我们看看一个简单的API,以下:  Private Declare Sub Sleep Lib &kernel32& Alias &Sleep& (ByVal dwMilliseconds As Long)  以上这个API的呢是起一个延时作用。你如果是刚接触API的话可能会感到API的书写及其复杂,而且会感到很不适应。其实这没什么的,慢慢习惯就好了。至于API这些复杂的书写你就不用操心了,在你安装VB的时候微软已经帮我们带上了API浏览器,这些全部都可以利用API浏览器帮我们自动生成。API浏览器的位置位于[开始菜单-程序-Microsoft Visual Basic 6.0 中文版-Microsoft Visual Basic 6.0 中文版工具-API 文本浏览器]。打开API浏览器,在最上面的一个文本框中输入Sleep,这时下面列表框中就会自动显示相应的API函数,然后点右边添加按钮即可,接着点击复制按钮,这时你就可以用Ctrl+V把声明的API添加到VB代码窗口中了。  这里我要说一下,有些新手可能还弄不明白。API的声明范围一般有两种模式,一种是Private(私有的),一种是Public(公用的)。一般Private是声明在类模块或窗体类中,Public声明在模块中。你在添加API的时候,添加按钮下面就有API的声明范围,可以根据自己的需要进行添加。这里我们一般选择私有的(Private)就可以了。  经过上面,我们知道如何添加API,接着我们分析一下API声明,这是你了解API必备的。首先看第一个单词Private,很显然,我上面刚刚讲过,这是申明一个私有的API变量。再看第二个Declare,这个单词帮我们告诉VB是在申明API函数,一般申明外在的API函数时都必须带上这个单词。第三个Sub,别告诉我你不知道什么意思?这就是我叫你先学习VB中过程函数的意思,这个说白了就是没有反回值,一般如果不是Sub而是Function都带有反回值的。第四个Lib,这个是告诉VB我们要声明哪一个DLL中的API函数,也就是告诉VB我们要申明第五个单词kernel32.dLL中的API,一般写DLL名称时都要用双引号括起来,如&user32&、&shell32.dll&等,至于后面的.dll这个可以带可不带。再来看第六个Alias,这个也是需要同后面一个一起用的,我们应该把第六个和第七个连起来一起看Alias &Sleep&,这个意思表示将被调用的过程在DLL中还有另外的名称,这个是可选的。最后括号里面的,也就是和过程函数一样,你传入相应的值就可以了。  上面我们分析完API函数声明以后,接着我们就要自己动手写代码了。先把这个API复制到Form1代码窗口中,然后写如下代码:Private Declare Sub Sleep Lib &kernel32& (ByVal dwMilliseconds As Long)Private Sub Form_Load()
Sleep 2000End Sub  解释一下,也就是在窗体启动时使用Sleep API进行延时2秒,后面的参数dwMilliseconds是表示你要延时的秒数,基本上和设置Timer中的秒数一样。你再看一下Sleep 2000的使用方式,是不是和使用VB过程函数一样呢?好了,我们的第一个VB API程序写完了,可以看到使用API并不是一件很难的事。三、如何才能提升你对API的学习兴趣?  API,我常把它看做成过程函数,不过每人都有每人的见解和理解方式,自己的理解方式只要可以帮助自己更好的学习和掌握API,也没必要一定要学习他人的。  1,自己做MsgBox  了解API参数的使用方法是很重要的,这里我们不用VB的MsgBox,直接使用API弹出MsgBox消息框。首先,打开API浏览器,选择MessageBox,大家可以用这个API和VB内置的MsgBox比较一下,其实MsgBox也就是MessageBox的缩写,只不过一个是API,一个是VB内置的,但两者都是通过API进行工作的。好了,选择私有声明方式,粘贴到VB代码编辑窗口中,然后新建一个CommandButton,写入以下代码:Private Declare Function MessageBox Lib &user32& Alias &MessageBoxA& (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Sub Command1_Click()
MessageBox Me.hwnd, &这里是内容&, &标题&, 0End Sub  先让我们来分析一下,首先看第一个参数Byval hWnd As Long,很显然这是一个长整形变量,所以我们这里需要传递的是数字,你可能会发现我们传递的并不是数字啊,而是 Me.hwnd??很奇怪是吗?如果你真的有此疑问说明你是真心想要学习好API的,现在就让我们来看看Me.hwnd到底是什么东西?以下摘自VB帮助文档:  hWnd 属性:返回窗体或控件的句柄。  句 柄:是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。  现在估计你差不多就已经明白了,我们调用的hwnd其实是一个句柄整数值,你可以用 Msgbox Me.hwnd 看一下就知道了。至于Me这是一个关键字,代表当前Form窗体对象。如:Me.Caption=&标题&、Me.BackColor=vbRed等。  接上面的,首先我们传入了Me.hwnd,表示是当前窗口调用MessageBox,这里告诉大家一个技巧,也就是以后凡是看到Byval hwnd As Long,一般都是需要传入句柄的,至于传入哪个对象句柄,那就要看你是怎么实现的了。  ByVal lpText As String,这个是字符串变量,标识着叫我们需要传入字符串进去,可以看里面的变量字符lpText,属于文本的意思,也就是说是用来显示MsgBox中的消息文本的。  ByVal lpCaption As String,也是字符串变量,还是传入字符串进去。在看里面的变量字符lpCaption,其实就是显示MsgBox标题的。  ByVal wType As Long,这是一个整形变量,需要传递整形数字,还是看里面的变量字符wType,标识着显示MsgBox类型,这里可以像VB的MsgBox一样使用,如这里可以传入:vbYesNo,vbOkCancel等,如果忽略那就传入0即可。  好了,按F5启动程序,点击Command1,接着就会弹出一个消息框,这里我们制作以及分析MsgBox已经完成了。希望你能在这段学习到一些知识。  2,来点实用的吧  就拿隐藏Windows任务管理器来说吧,这里只能隐藏任务管理器中的窗口,不能隐藏进程。(问:有没有隐藏进程的?答:你想干什么?),当程序运行后你无法从任务管理器的窗口中关闭程序,只能从进程中进行终止。好了,还是老规矩,打开API浏览器,输入GetWindow和ShowWindow两个API,声明范围还是私有的,复制粘贴到Form代码窗口中,嗯,好了?别急,还是API浏览器,选择Combox中的常数,输入GW_OWNER和SW_HIDE这两个API常数,然后粘贴到代码窗口中,问我这两个是干什么的?那就接着往下看吧。写入以下代码:Private Declare Function GetWindow Lib &user32& (ByVal hwnd As Long, ByVal wCmd As Long) As LongPrivate Declare Function ShowWindow Lib &user32& (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate Const GW_OWNER = 4Private Const SW_HIDE = 0Private Sub Form_Load()
Dim lphWnd As Long
lphWnd = GetWindow(Me.hwnd, GW_OWNER)
ShowWindow lphWnd, SW_HIDEEnd Sub  又到了分析的时候了,这对刚入门的新手可谓是最激动的时候了。好了,还是老子,看看两个API的表面意思和传递值变量。  先看GetWindow,表面意思:获取窗口。传递值变量:hWnd整形句柄,wCmd整形命令值。  再看ShowWindow,表面意思:显示窗口。传递值变量:hWnd整形句柄,nCmdShow整形命令值。  然后是使用代码,先看lphWnd = GetWindow(Me.hwnd, GW_OWNER)这句,这句意思是获取当前窗口的所有者窗口句柄,可以看到GetWindow是Function过程函数,执行以后会返回相应的窗口句柄值,这个值为Long整形(同句柄)。接着调用ShowWindow lphWnd, SW_HIDE,这句意思是显示lphwnd这个句柄的窗口,关键一句是最后的SW_HIDE,这是API函数的常量。通过设置常量能让系统知道API到底应该怎么执行显示窗口,是显示?还是隐藏?Hide当然是隐藏的意思。好了,编译成Exe,运行后打开任务管理器,查看程序窗口,还有吗?  我又要说一下了,有些人可能不懂为什么要用GW_OWNER这些常量,这些到底有什么用?还有就是我怎么知道哪些API对应哪些的常量?其实这些常量你只要稍微注意一下就知道它们是怎么回事了,如在GetWindow中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE这些常量都有一个共同的特点,就是他们都是以API的单词第一个字母为标准。如GetWindow相对应的常量就是Get(G)Window(W)=GW,ShowWindow相对应的常就是Show(S)Window(W)=SW,这些常量可以自己在VB的API浏览器中找找看。3,我还想写下去,不过我不知道写得怎么样,先发出来看看大家的反应再说。大家如果发现有什么不对的地方尽请指出,我接受大家的批评。。。。
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

 

随机推荐