按次計費接口的簡單實現思路


前言

相信我們大家或多或少都有接觸過,一些需要收費的接口。雖然說這個收費的標准和模式都不一樣,實現的思路自然也是略有區別。

今天來簡單說一下按次計費接口的實現思路。

何為按次計費

按次計費,簡單來說,就是每次成功的調用都需要收費。

當然,這個也只是最終的結果,在這之前,往往會要求調用方先購買一定的使用次數,才能正常發起調用,也才可以進行計費操作。

舉個簡單的例子,有一個數據供應商提供了一個天氣數據的接口,假設它的價格是1分錢1次。

那么這個時候有個人想買它的這個接口100次,就要先給錢,才能拿到接口的相關信息,然后才能正常調用。

這里還會涉及到一個有效調用和無效調用,只能是有效的接口調用才能真正的扣調用方的次數。

什么樣的情況能定義為有效調用,這個就是由供應商那邊自己定的了。正常是能在規定的時間內返回有數據的結果。

到這里,背景已經交代清楚了,下面我們就來看看思路。

簡單的實現思路

個人認為,思路這邊主要就是下面4個要考慮的點:

  1. 次數怎么樣扣減
  2. 調用日志如何記錄
  3. 如何看到實時余次
  4. 余次不足的通知

下面依次來看一下。

次數怎么樣扣減

這里是借助redis來完成這一操作的。一個是加次數,一個是減次數。

加次數,在用戶購買次數的時候就將購買的次數寫進redis,key的格式可以類型這樣 【countapi:用戶名:接口名】,然后value就是用戶購買的次數了。

減次數,在用戶成功調用的時候就進行減一的操作就可以了。

調用日志如何記錄

為什么要記錄這個調用日志,可以理解為就是和調用方扯皮的依據。一般會記錄,用戶,調用時間,IP,入參和出參等。

這個調用日志是不會有修改操作的,只有添加和查詢。所以可以優先選擇把它存儲到ES中。

異步入庫是首選,不會阻礙正常的查詢。

直接把調用日志寫入kafka,由另一個程序讀kafka,然后慢慢的寫入ES。

當然,RabbitMQ也是一個選擇,可以視情況選擇。

注,這里有必要做一下容錯處理,如果 kafka或RabbitMQ 宕機了,這部分調用記錄要先保存到一個地方,然后等kafka或RabbitMQ恢復了再扔進ES。

如何看到實時余次

單個用戶的余次,還可以直接從redis中拿出來。如果是要看一堆用戶,還要分頁,這個可能就不太好辦了。

所以用戶在購買次數的時候,除了把次數寫進redis,肯定也會生成一條購買記錄在數據庫中。

用戶一直在查,redis中的次數一直在減少,但是購買記錄中的次數卻是沒有減少的,給管理人員帶來的假象就是用戶沒有調用過,這個肯定是不行的。

一般情況下,也不會每查一次就去更新數據庫,因為如果量大,數據庫的壓力就會比較大。

所以可以考慮每隔5~10秒讀取一次redis中的次數,然后更新到數據庫中。這樣得到的余次可以認為是近似實時的。

余次不足的通知

這個通知就相對簡單了,拿到最近的剩余次數,如果低於某個閥值,就發郵件或短信通知用戶就可以了。

最后附上一張簡易的示意圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM