技术领域
[0001] 本发明涉及API开发技术领域,尤其涉及一种基于JSON开发API的开发方和工具。
相关背景技术
[0002] 传统的API开发通常包括以下流程:首先确定API的目的,设计API的结构,选择适当的编程语言和工具,然后开发和测试API,部署API到生产环境,最后撰写API文档并且交付使用。整个过程过于费心费力,编程语言和工具以及开发需要经过大量的时间和选型,代码源文件往往为一整个代码包。可见,传统的API开发方式流程繁琐、缺乏灵活性和扩展性,且需要手动编写和调试大量代码,开发周期长,不能快速响应市场需求和变化。
具体实施方式
[0048] 为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图及实施实例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0049] 请参见图1,本发明第一实施例提供了一种基于JSON开发API的开发方法1,包括以下步骤:
[0050] 获取业务需求;
[0051] 根据业务需求编写JSON文件;
[0052] 基于JSON文件编译生成通用代码和业务代码;
[0053] 编译通用代码和业务代码,得到二进制可执行程序。
[0054] 传统的API开发方式流程繁琐、缺乏灵活性和扩展性,且需要手动编写和调试大量代码,开发周期长,不能快速响应市场需求和变化。可以理解地,本方案提供的基于JSON开发API的开发方法简化了撰写大量代码及结构化的过程,例如Server,httpservlet等WEB相关代码均不需要书写,Repository层代码也不用实现,而采用在JSON中描述的方式书写,由编译器将其翻译为最终需要的产物。相比于传统API开发方式,本方案还具有以下优点:
[0055] 1.简洁和可读性强:JSON是一种轻量级的数据交换格式,具有简洁、易读的结构,使得API的定义和配置更加清晰和可读。开发人员可以直接查看JSON文件,快速理解API的结构和参数。
[0056] 2.快速开发和迭代:使用JSON作为API的配置文件,可以快速定义和描述API的接口、参数和响应等信息。开发人员无需手动编写大量的代码,可以快速开发和迭代API,缩短开发周期。
[0057] 3.可配置性和可扩展性:基于JSON开发API的方式可以通过修改JSON文件来调整API的行为和配置。这使得API具有良好的可配置性和可扩展性,可以根据需求快速调整和扩展API的功能和特性。
[0058] 4.易于集成和交互:JSON是一种通用的数据格式,在不同的编程语言和平台之间易于传递和解析。基于JSON开发的API可以更容易地与其他系统和服务进行集成和交互,提高系统的互操作性。
[0059] 5.代码复用和标准化:基于JSON开发的API可以通过定义通用的API模板和规范,实现代码的复用和标准化。开发人员可以基于预定义的API模板来开发具体的API,提高代码的一致性和可维护性。
[0060] 在一些实施例中,基于JSON文件编译生成通用代码和业务代码包括以下步骤:
[0061] 获取JSON文件;
[0062] 将JSON文件解析为AST结构;
[0063] 遍历AST结构并执行代码生成函数;
[0064] 生成通用代码和业务代码。
[0065] 具体地,按照以下步骤进行:
[0066] 1.获取JSON文件:
[0067] 首先,从文件系统或其他数据源获取JSON文件,将其读取到内存中以供后续处理。
[0068] 2.解析为AST结构:
[0069] 对于JSON文件,我们需要将其解析为抽象语法树(AST)结构,以便在后续的代码生成过程中进行遍历和处理。解析过程包括词法分析和语法分析,确保JSON文件的正确性。
[0070] 3.遍历AST结构并执行代码生成函数:
[0071] 在这一步骤中,我们会遍历AST结构,并根据每个节点的类型和内容执行相应的代码生成函数。这些代码生成函数根据业务需求,将AST节点转换为相应的通用代码和业务代码。
[0072] 示例性地,假设我们的JSON文件定义了一个名为"SumAPI"的API,其中包含两个参数num1和num2。在遍历AST结构时,我们可以根据参数信息生成如图2所示处理函数的代码,应理解,在实际开发中,代码生成函数的实现会更加复杂,可能涉及模板替换、条件判断等操作,以根据业务需求生成相应的代码。
[0073] 4.生成通用代码和业务代码:
[0074] 在遍历AST结构并执行代码生成函数之后,我们会生成所需的通用代码和业务代码。这些代码可以是存储在内存中的数据结构,也可以是保存在文件中的代码文件。生成的代码可以包含API的处理函数、路由配置、错误处理等内容,以满足API的需求。
[0075] 以上步骤描述了根据给定的JSON文件编译生成通用代码和业务代码的过程。从获取JSON文件开始,通过解析为AST结构,遍历AST结构并执行代码生成函数,最终生成所需的通用代码和业务代码。通过这个过程,我们可以根据JSON文件的定义快速生成与业务需求匹配的代码,加快API开发的速度和效率。
[0076] 优选地,生成的通用代码和业务代码为Golang代码。应理解,Golang的编译为跨平台编译,可更好地支持不同的操作系统。
[0077] 在一些实施例中,遍历AST结构并执行代码生成函数包括以下步骤:
[0078] 执行ast.walk()函数,对整个AST结构进行遍历,在遍历过程中根据每个节点的类型和内容执行gen()函数。
[0079] 具体地,按照以下步骤进行:
[0080] 1.执行ast.walk()函数:
[0081] 首先,我们使用语言特定的AST遍历函数(如Golang中的ast.Walk)对整个AST结构进行遍历。这个函数会按照预定义的遍历顺序访问AST中的每个节点。
[0082] 2.在遍历过程中根据节点类型和内容执行gen()函数:
[0083] 在遍历过程中,针对每个节点的类型和内容,我们执行相应的代码生成函数(通常命名为gen())。这些代码生成函数根据节点的信息,生成相应的代码片段。
[0084] 示例性地,假设我们有一个名为"SumAPI"的API节点,它包含一个处理函数的节点,我们可以定义一个gen函数来处理该节点,如图3所示。应理解,在实际开发中,根据AST节点的类型和内容,可以有多个不同的gen函数,用于生成不同类型的代码片段。
[0085] 3.在gen()函数中处理子节点:
[0086] 在gen函数中,如果当前节点有子节点(例如,API节点包含处理函数节点),我们可以继续调用gen函数来处理子节点。这样可以递归地处理AST结构中的所有节点,确保生成完整的代码。在如图4所示的示例性代码中,我们根据不同的节点类型(如API节点、处理函数节点)执行相应的代码生成操作,并对子节点进行递归处理。
[0087] 以上步骤描述了遍历AST结构并执行代码生成函数的过程。通过执行AST遍历函数(如ast.Walk)对整个AST结构进行遍历,并在遍历过程中根据每个节点的类型和内容执行相应的代码生成函数(如gen函数),我们可以生成与AST结构对应的代码片段。这个过程可以通过递归处理子节点来确保处理完整的AST结构。通过这种方式,我们可以根据AST结构的信息生成与业务需求匹配的代码。
[0088] 在一些实施例中,根据业务需求编写JSON文件包括以下步骤:
[0089] 1.确定API的基本信息:首先,确定API的基本信息,如API的名称、版本、描述等。这些信息可以作为JSON文件的顶层属性进行定义。
[0090] 2.确定API的端点和请求方法:根据业务需求,确定API的端点(URL路径)和请求方法(GET、POST、PUT、DELETE等)。将端点和请求方法作为JSON文件的属性进行定义。
[0091] 3.确定API的参数:根据API的功能和业务需求,确定API的输入参数。考虑哪些参数是必需的,哪些是可选的,以及它们的数据类型(字符串、数字、布尔值等)。将参数作为JSON文件中的属性进行定义,可以使用数组或对象结构表示多个参数。
[0092] 4.确定API的响应:确定API的响应数据结构和格式。考虑响应的数据类型,是否有多个响应状态码(如成功、失败、错误等),以及每个状态码对应的响应数据。将响应数据结构作为JSON文件中的属性进行定义,可以使用对象结构表示不同的响应数据。
[0093] 5.确定API的错误处理:考虑API的错误处理方式和错误消息的定义。定义常见的错误状态码(如400、401、404、500等),以及每个错误状态码对应的错误消息和响应格式。将错误处理信息作为JSON文件中的属性进行定义,可以使用对象结构表示不同的错误处理。
[0094] 6.其他补充信息:根据具体业务需求,可以添加其他补充信息,如鉴权方式、访问限制、文档链接等。将这些信息作为JSON文件的属性进行定义。
[0095] 7.验证和修改:完成JSON文件的编写后,进行验证和修改。确保JSON文件的语法正确,所有必需的属性都被定义,并与业务需求一致。可以使用JSON编辑器或验证工具进行验证,并根据需要进行修改和调整。
[0096] 按照以上步骤编写JSON文件可以帮助准确地描述API的需求和规范,并为后续的代码生成和API开发提供清晰的指导。确保JSON文件与业务需求保持一致,有助于提高开发效率和减少错误。
[0097] 在一些实施例中,编译通用代码和业务代码包括以下步骤:
[0098] 定位到包含生成的通用代码和业务代码的目录;
[0099] 在目录下执行Go build命令,对通用代码和业务代码进行编译;
[0100] 验证编译结果。
[0101] 具体地,包括以下步骤:
[0102] 1.定位到包含生成的代码的目录:在终端或命令行界面中,导航到包含生成的代码的目录。这可以是保存生成的代码的目录或项目的根目录。
[0103] 2.执行Go build命令:在终端或命令行界面中,执行以下命令来调用Golang编译器并执行Go build命令;
[0104] 3.指定输出文件名(可选地):如果想为生成的二进制文件指定不同的名称,可以在Go build命令后面添加‑o选项并指定输出文件的名称。
[0105] 4.交叉编译(可选):如果希望将代码编译为不同操作系统或架构的二进制文件,可以使用GOOS和GOARCH环境变量进行交叉编译。
[0106] 5.验证编译结果:编译过程完成后,Go编译器将生成二进制文件并放置在当前目录(或指定的输出目录)中。可以验证生成的二进制文件是否符合预期。
[0107] 按照以上步骤,我们可以使用Golang编译器执行Go build命令,将生成的代码编译为可执行的二进制文件。根据需要,可以指定输出文件名、进行交叉编译,并在完成后验证生成的二进制文件。
[0108] 综上,基于JSON开发API的方式具有简洁、可读性强、快速开发和迭代、可配置性和可扩展性等优点,使得API开发更加灵活和高效,适用于快速迭代、敏捷开发和大规模的API项目。
[0109] 请参阅图5,本发明的第二实施例还提供一种基于JSON开发API的开发工具2,用于实现上述的基于JSON开发API的开发方法,基于JSON开发API的开发工具包括:
[0110] 接收模块20:用于获取业务需求;
[0111] JSON文件编写模块21:用于根据所述业务需求编写JSON文件,并定义API的名称、端点、请求方法和参数信息;
[0112] 代码生成模块22:用于基于所述JSON文件编译生成通用代码和业务代码;
[0113] 编译模块23:用于编译所述通用代码和业务代码,得到二进制可执行程序。
[0114] 优选地,基于JSON开发API的开发工具还包括部署模块24,用于将编译生成的二进制可执行程序部署到服务器中,使API可以运行。
[0115] 应当注意,尽管在上文详细描述中提及了用于执行流程的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0116] 此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
[0117] 通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD‑ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端,或者网络设备等)执行根据本公开实施方式的方法。
[0118] 本发明第三实施例还提供一种可读存储介质,其上存储有计算机程序指令,计算机程序指令被执行时实现如上述方法的步骤。
[0119] 在一些可能的实施例中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“基于JSON开发API的开发方法”部分中描述的根据本公开各种示例性实施方式的步骤。
[0120] 请参阅图6,本发明第四实施例还提供一种程序产品3,其上包括计算机程序指令30,计算机程序指令被执行时实现如上述方法的步骤。
[0121] 请参阅图7,本发明第五实施例还提供了一种电子设备4,具体的,该电子设备4包括处理器40和存储器41;存储器41上存储有计算机程序,计算机程序在被处理器运行时执行如上实施方式的任一项的方法。
[0122] 进一步地,处理器40、通信接口43和存储器41通过总线42连接;处理器40用于执行存储器41中存储的可执行模块,例如计算机程序。
[0123] 其中,存储器41可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non‑volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口43(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
[0124] 总线42可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0125] 其中,存储器41用于存储程序,处理器40在接收到执行指令后,执行程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器40中,或者由处理器40实现。
[0126] 处理器40可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器40中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器40可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field‑Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器41,处理器40读取存储器41中的信息,结合其硬件完成上述方法的步骤。
[0127] 功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0128] 应注意到:相似的标号和字母在附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0129] 最后应说明的是:以上各实施例仅用以说明本(发明或发明)的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。