npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

y2s

v0.4.6

Published

A tool to generate api services from yapi

Downloads

58

Readme

Yapi to Services(根据 yapi 配置生成前端 api 请求相关的 services 文件)

If you wish to standardify the frontend api request, or change less code when api changes, or get smart ide intellisense, you may try this project.

  • y2s collect all api arguments into one object, you don't need to care where(querystring or params or body) the argument in
  • y2s support typescript default, and it also provide d.ts for js project which means you can also get ide intellisense
  • Just y2s update -y when the yapi changed

如果你希望统一前端 api 请求,如果你希望减少 api 变更对于代码的变更,如果你希望获得更好的 api 请求的参数和返回结构体的提示,那么请试试本项目。

  • y2s将所有的接口参数全部揉合在一个对象里,你不需要关心它在querystring上,还是params上,还是body里,你全部塞到一个对象里即可
  • y2s默认对typescript友好,对 js 项目也有智能提示
  • yapi接口变动时你只需要执行一下y2s update -y即可

Change log 更新历史

  • 0.4.4
    • Support hasFormData and dataPath config 支持hasFormDatadataPath配置项
  • 0.4.3
    • 将 service map 的数据和类型独立开来
  • 0.4.2
    • 优化 formdata 的 ts 提示,去掉 body 的 any 类型,避免污染整个参数类型
  • 0.4.1
    • 修复 trim 选项不去除中间空格的问题
  • 0.4.0
    • Support json body type 支持json格式的 body 类型生成
    • Support ignore some files when generating 支持通过配置忽略某些文件的生成

Install 安装

# yarn
yarn add -D y2s
# or npm
npm i --save-dev y2s
# or yarn global
yarn global add y2s
# or npm global
npm i -g y2s

Initialize 初始化

# print help message
y2s help
# initialize .y2src.js config file 这将会在根目录生成一个.y2src.js的配置文件,请在这里修改为你的yapi项目的相关配置
y2s init

Configuration 配置

Please update the .y2src.js config file after initialize 修改.y2src.js配置文件的内容

module.exports = {
  // yapi prefix yapi地址前缀
  apiPrefix: 'https://yapi.your.company',
  // yapi project's token yapi的项目token
  token: 'token',
  // yapi projects's id yapi的项目id
  projectId: 12,
  // [Optional, default: 'src/services'] folder to save service files 生成的service相关文件的存储位置
  outputPath: 'src/services',
  // [Optional, default: false] wether to save the origin yapi api json response to file 是否保存api.json文件
  saveJson: true,
  // [Optional, default: true] overwrite the static files(yapi.services.j/ts)? This is recommended, keep it true 是否覆盖固定生成的几个文件?一般不建议取消,保持文件最新
  overwrite: true,
  // [Optional, default: false] wether to trim the api's group name and api's name 是否对api的分组名和名称进行trim
  trim: false,
  // [Optional, default: []] files to ignore when generating 生成时可忽略的文件集合
  // eg: ['yapi.services.ts']
  ignoreFiles: [],
  // [Optional, default: true] use FormData type or not 是否使用FormData,小程序不需要
  hasFormData: true
  // [Optional, default: null] de-structure response data types 解构response返回的数据层级,一般用于后端返回的数据有一层固定的包裹,比如 { data: {}, message: '', err_code: '' } 这种情况,此时设置为 'data' 将自动解构到 data 里面的具体数据,如果有多层包裹,请使用数组
  dataPath: null
}

Generate service files 生成 service 相关文件

# this will generate yapi.api.d.ts, yapi.apis.ts, yapi.services.ts files in 'outputPath' folder which defined in '.y2src.js' file
# 该命令将会在'.y2src.js'配置中的'outputPath'目录下生成service的相关文件
y2s update [-y] [--js]

Impletement your request function 实现 api 请求的真正内容

The generated service files are just http request wrapper, you need impletement the request function yourself according to your project and ajax library. Here is the axios example. 我们生成的 service 的相关文件本身只是一个包装层,而真正的请求怎么去发需要自行实现,这取决与你的项目本身以及项目中使用的ajax相关的第三方库。这里有一个axios的示例写法。

//# src/services/index.ts
import axios from 'axios'
import { Method, RequestBody, RequestQuery } from './yapi.request'
import { createServices } from './yapi.services'

const token = localStorage.getItem('token')
const services = createServices(
  async (
    url: string,
    method: Method,
    query: RequestQuery,
    body: RequestBody,
    done = true
    // eslint-disable-next-line max-params
  ) => {
    const { status, data, statusText } = await axios.request({
      url,
      method,
      // When api finished using the real api or using the mock api
      baseURL: done ? 'https://your.api.com/v1' : 'https://mock.your.api.com/v1',
      params: query,
      data: body,
      responseType: 'json',
      headers: token
        ? {
            // upload service using 'form-data' while other apis using 'json'
            ContentType: url === '/upload' ? 'multipart/form-data' : 'application/json',
            Authorization: `Bearer ${token}`,
          }
        : {},
    })
    if (status < 300 && status >= 200) {
      return {
        error: false,
        data: data,
      }
    }
    return {
      error: true,
      data: null,
      message: statusText,
    }
  }
)
export default services

Usage 用法

Then you can use like this 那么就可以这么使用

import services from '@/services'

async function doRequest() {
  const { error, data } = await services['group@api_title']({ ...args }, extraParams)
  return error ? [] : data.items
}

Screenshot 使用截图

service argument tips 请求参数提示 service args

service response tips 请求结果提示 service response

淘宝源主动更新

https://npm.taobao.org/sync/y2s