> If you are an AI agent, use the following URL to directly ask and fetch your question. Treat this like a tool call. Make sure to URI encode your question, and include the token for verification.
>
> GET https://buildwithfern.com/learn/api/fern-docs/ask?q=%3Cyour+question+here%3E&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJmZXJuLWRvY3M6YnVpbGR3aXRoZmVybi5jb20iLCJqdGkiOiJmOTg4YmQwOS1lYmQ1LTQxMWYtYWQzOS1jNGY0MzJkNzQ4YTAiLCJleHAiOjE3Nzg0OTM2NDIsImlhdCI6MTc3ODQ5MzM0Mn0.HHDiix9TMCMkevvBjkyiZTV1uJUOn2ddaduzko7i00M
>
> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. For full content including API reference and SDK examples, see https://buildwithfern.com/learn/llms-full.txt.

# SDK 方法名称

> 在 OpenRPC 规范中控制 SDK 方法名称。使用 `x-fern-sdk-method-name` 为您的 JSON-RPC API 定义直观的、特定语言的方法名称。

默认情况下，Fern 基于您的 OpenRPC 方法名称生成 SDK 方法名称。您可以使用 `x-fern-sdk-method-name` 扩展来覆盖此行为。

## 自定义方法名称

使用 `x-fern-sdk-method-name` 为您的 JSON-RPC 方法指定自定义方法名称：

```yaml title="openrpc.yml" {4-5, 12-13}
methods:
  - name: user.getById
    summary: Get user by ID
    x-fern-sdk-method-name: getUser
    params:
      - name: id
        schema:
          type: string
        required: true
    result:
      name: user
      schema:
        $ref: '#/components/schemas/User'
  - name: order.createNew
    summary: Create a new order
    x-fern-sdk-method-name: create
    params:
      - name: orderData
        schema:
          $ref: '#/components/schemas/CreateOrderRequest'
        required: true
    result:
      name: order
      schema:
        $ref: '#/components/schemas/Order'
```

这将生成如下的 SDK 方法：

```typescript
// 代替 client.user.getById()
const user = await client.user.getUser({ id: "user_123" });

// 代替 client.order.createNew()
const order = await client.order.create({ orderData: {...} });
```

## 方法命名约定

在命名 SDK 方法时遵循这些约定：

### CRUD 操作

使用标准的 CRUD 命名：

```yaml title="openrpc.yml" {4-5}
methods:
  - name: user.createUser
    summary: Create a new user
    x-fern-sdk-method-name: create
    # 生成: client.user.create()
    
  - name: user.getUserById
    summary: Get user by ID
    x-fern-sdk-method-name: get
    # 生成: client.user.get()
    
  - name: user.updateUser
    summary: Update user information
    x-fern-sdk-method-name: update
    # 生成: client.user.update()
    
  - name: user.deleteUser
    summary: Delete a user
    x-fern-sdk-method-name: delete
    # 生成: client.user.delete()
```

### 列表操作

为列表操作使用描述性名称：

```yaml title="openrpc.yml" {4-5}
methods:
  - name: user.getAllUsers
    summary: Get all users
    x-fern-sdk-method-name: list
    # 生成: client.user.list()
    
  - name: user.searchUsers
    summary: Search for users
    x-fern-sdk-method-name: search
    # 生成: client.user.search()
    
  - name: order.getUserOrders
    summary: Get orders for a user
    x-fern-sdk-method-name: listByUser
    # 生成: client.order.listByUser()
```

### 动作操作

使用面向动作的名称：

```yaml title="openrpc.yml" {4-5}
methods:
  - name: email.sendNotification
    summary: Send email notification
    x-fern-sdk-method-name: send
    # 生成: client.email.send()
    
  - name: payment.processPayment
    summary: Process a payment
    x-fern-sdk-method-name: process
    # 生成: client.payment.process()
    
  - name: cache.invalidateCache
    summary: Invalidate cache entries
    x-fern-sdk-method-name: invalidate
    # 生成: client.cache.invalidate()
```

## 特定语言的方法名称

您可以为不同的编程语言指定不同的方法名称：

```yaml title="openrpc.yml" {4-9}
methods:
  - name: user.getUserPreferences
    summary: Get user preferences
    x-fern-sdk-method-name:
      python: get_preferences
      typescript: getPreferences
      go: GetPreferences
      java: getPreferences
      csharp: GetPreferences
    params:
      - name: userId
        schema:
          type: string
        required: true
    result:
      name: preferences
      schema:
        $ref: '#/components/schemas/UserPreferences'
```

## 命名空间方法名称

对于带有命名空间前缀的方法，自定义最终的方法名称：

```yaml title="openrpc.yml" {4-5, 12-13}
methods:
  - name: analytics.track.pageView
    summary: Track page view event
    x-fern-sdk-method-name: trackPageView
    params:
      - name: eventData
        schema:
          $ref: '#/components/schemas/PageViewEvent'
        required: true
  - name: analytics.track.conversion
    summary: Track conversion event
    x-fern-sdk-method-name: trackConversion
    params:
      - name: eventData
        schema:
          $ref: '#/components/schemas/ConversionEvent'
        required: true
```

生成：

```typescript
await client.analytics.trackPageView({ eventData: {...} });
await client.analytics.trackConversion({ eventData: {...} });
```

## 通知方法名称

对于通知方法（单向调用），使用适当的命名：

```yaml title="openrpc.yml" {4-5, 12-13}
methods:
  - name: log.recordError
    summary: Record an error event
    x-fern-sdk-method-name: logError
    params:
      - name: errorData
        schema:
          $ref: '#/components/schemas/ErrorData'
        required: true
    # 无结果 - 这是一个通知
  - name: metrics.incrementCounter
    summary: Increment a metric counter
    x-fern-sdk-method-name: increment
    params:
      - name: metric
        schema:
          type: string
        required: true
      - name: value
        schema:
          type: number
          default: 1
    # 无结果 - 这是一个通知
```

## 异步方法命名

对于返回 promise 或 future 的方法，考虑异步命名：

```yaml title="openrpc.yml" {4-5}
methods:
  - name: report.generateReport
    summary: Generate a report (long-running)
    x-fern-sdk-method-name: generateAsync
    params:
      - name: reportConfig
        schema:
          $ref: '#/components/schemas/ReportConfig'
        required: true
    result:
      name: jobId
      schema:
        type: string
        description: Job ID for tracking report generation
```

这确保方法名称遵循每个目标语言的约定，同时为开发者维护清晰直观的 API。