Calvert's murmur

透過 OAuth 2.0 JWT 整合 Salesforce API 到你的伺服器

Salesforce OAuth 2.0

有時你會想要授權伺服器來存取資料,而不需在每次伺服器交換資訊時透過互動方式登入。

本文將帶你了解如何整合 Salesforce API 到你的伺服器。我們將使用適用於伺服器對伺服器整合的 OAuth 2.0 JWT 承載者流程來達成此需求。此授權流程使用憑證來簽署 JWT,設定完成後你的伺服器不需要與使用者互動即可呼叫 Salesforce 的 API。但,此流程需要預先授權連線應用程式。

註:在 Salesforce 中,你的自訂應用程式稱為「連線應用程式(Connected App)」。

繼續閱讀

Laravel 路由群組:6 個組織路由的技巧

PHP Laravel

原文:Povilas KoropLaravel Route Grouping: 6 Techniques to Organize Routes

Laravel 路由是開發者從一開始就學到的功能。但是隨著專案的成長,管理不斷增加的路由檔案及找到正確的 Route::get() 定義變得越來越困難。幸運的是,有一些技巧可以讓路由變得更簡短、易讀,用不同的方式對路由及其設定組成群組。讓我們來看看吧!

不過,我們會更深入一點,而不是只探討初學者等級的 Route::group()

繼續閱讀

如何預設為每個模型及遷移加上軟刪除?

PHP Laravel

原文:Povilas KoropHow to Add Soft Deletes to Every Model/Migration By Default?

有太多次我的客戶要求我恢復已刪除的資料。以防萬一,我非常喜歡對幾乎所有的 Eloquent 模型使用軟刪除功能。那麼,如何使該過程自動化一點呢?

一般來說,我們如何加入軟刪除呢?透過將 Trait 加入到模型中:

use Illuminate\Database\Eloquent\SoftDeletes;
 
class Task extends Model
{
    use SoftDeletes;
}
繼續閱讀

Go 的命令列旗標/選項

原文:CalliCoderGo Command-line flags/options

命令列程式通常會接受來自使用者的旗標或選項來自訂指令的執行。旗標是在執行指令時加在指令名稱後的鍵值對。

Go 允許你使用標準函式庫中的 flags package 來接收命令列旗標。在本文中,你將學到如何為命令列程式接收旗標。

Go 的命令列旗標

要接收命令列旗標,你需要定義旗標以便從命令列取值。你可以透過多種方式做到:

  1. 使用 flag.String()flag.Bool()flag.Int() 等方法定義旗標。
  2. 使用 flag.StringVar(), flag.IntVar() 等方法將現有變數綁定到命令列旗標。
  3. 透過宣告一個實作 flag.Value 介面的類型來建立自訂旗標,然後使用 flag.Var() 方法將自訂類型的變數與命令列旗標綁定。
繼續閱讀

Golang 的排序和透過函數自訂排序

Golang

原文:CalliCoderGolang Sorting and Custom Sorting by functions

排序是我們平常撰寫程式時常見的用法。在本文中,你將學到如何在 Go 中對原始類型(string、int、float64)和自訂的集合進行排序。

在 Go 中對字串、整數或浮點數的 slice 進行排序

Go 的 sort package 提供了幾種方便的方法來對原始類型的 slice 進行排序。以下範例示範了如何在 Go 中對字串、整數和浮點數的 slice 進行排序:

package main

import (
	"fmt"
	"sort"
)

func main() {
	// Sorting a slice of Strings
	strs := []string{"quick", "brown", "fox", "jumps"}
	sort.Strings(strs)
	fmt.Println("Sorted strings: ", strs)

	// Sorting a slice of Integers
	ints := []int{56, 19, 78, 67, 14, 25}
	sort.Ints(ints)
	fmt.Println("Sorted integers: ", ints)

	// Sorting a slice of Floats
	floats := []float64{176.8, 19.5, 20.8, 57.4}
	sort.Float64s(floats)
	fmt.Println("Sorted floats: ", floats)
}
$ go run sorting.go
Sorted strings:  [brown fox jumps quick]
Sorted integers:  [14 19 25 56 67 78]
Sorted floats:  [19.5 20.8 57.4 176.8]
繼續閱讀

Golang 的網址編碼和解碼

Golang

原文:CalliCoderGolang URL Encoding and Decoding

網址只能包含 US-ASCII 字元集中的有限字元。這些字元包括數字(0-9)、字母(A-Za-z)和一些特殊字元(-._~)。此字元集外的任何字元都需要進行編碼或跳脫,然後才能在網址中使用。

在本文中,你將學到如何對字串進行編碼,以便將其安全的放在網址中。

在 Go 中進行網址編碼或跳脫字串

一個網址由多個部分組成(伺服器位址、路徑、查詢字串等)。通用語法如下所示:

scheme:[//[user:password@]host[:port]]path[?query][#fragment]

Go 提供了以下兩個函數來對字串進行編碼或跳脫,以便將其安全的放在網址中:

  • QueryEscape(): 對字串進行編碼,以便安全的放在網址查詢字串中。
  • PathEscape(): 對字串進行編碼,以便安全的放在網址路徑中。
繼續閱讀

Golang 中的 Base64 編碼和解碼

Golang

原文:CalliCoderBase64 Encoding and Decoding in Golang

Base64 是一種二進位轉文字編碼方案。它用可列印的 ASCII 字串格式對二進位資料進行編碼。當需要透過僅設計用來處理文字資料無法正確處理二進位資料的通訊媒介傳輸二進位檔案時,通常會使用它。

Go 內建支援對 Base64 編碼和解碼。在本文中,你將學到如何在 Go 中進行 Base64 編碼和解碼。

Go 中的 Base64 編碼

Go 的 encoding/base64 package 支援標準及與網址相容的 Base64 編碼和解碼。與網址相容的 Base64 編碼允許你將 Base64 編碼的字串安全的放在網址內。

讓我們來看個範例:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	data := "Gol@ng is Awesome?~"

    // Standard Base64 Encoding
	encodedData := base64.StdEncoding.EncodeToString([]byte(data))
	fmt.Println(encodedData)

	// URL and filename-safe Base64 encoding
	urlSafeEncodedData := base64.URLEncoding.EncodeToString([]byte(data))
	fmt.Println(urlSafeEncodedData)
}
繼續閱讀

在 Go 讀寫環境變數

Golang

原文:CalliCoderReading and Writing Environment Variables in Go

環境變數是在程式執行時向程式提供動態設定資訊的一種方式。環境變數通常用於讓同一個程式在不同的環境中運作,如本機、驗證或生產環境。

在 Go 取得、設定、取消設定和擴充環境變數

下面的程式示範了如何在 Go 中使用環境變數。它利用了 os package 提供的以下功能:

  • os.Setenv(key, value): 設定環境變數。
  • os.Getenv(key): 取得環境變數。如果環境變數不存在,則返回空值。要區分空值和未設定的值,請使用 LookupEnv。
  • os.Unsetenv(key): 取消設定環境變數。
  • os.LookupEnv(key): 取得環境變數值和一個用來表示環境變數是否存在的布林值。它返回一個字串和布林值,如果環境變數不存在,布林值為 false。
  • os.ExpandEnv(str): 根據目前的環境變數,取代字串中的 ${var}$var 來擴充字串。
繼續閱讀

在 Go 讀取命令列引數

Golang

原文:CalliCoderReading command line arguments in Go

命令列引數是在程式啟動時向程式提供額外資訊的一種方式。提供命命列引數最簡單的方法是執行指令時在後面指定以空格分隔的數值:

$ ./my-program Arg1 Arg2 Arg3

在 Go 讀取命令列引數

在 Go 中,你可以使用 os.Args 變數來讀取原始命令列引數。它是一個 slice 且包含了以程式名稱為首的所有命令列引數。

package main

import (
	"fmt"
	"os"
)

func main() {
	args := os.Args
	fmt.Printf("All arguments: %v\n", args)

	argsWithoutProgram := os.Args[1:]
	fmt.Printf("Arguments without program name: %v\n", argsWithoutProgram)
}
$ go build command-line-arguments.go

$ ./command-line-arguments Hello World From Command Line
All arguments: [./command-line-arguments Hello World From Command Line]
Arguments without program path: [Hello World From Command Line]
繼續閱讀

使用 JWT 身份驗證實作 Laravel REST API

PHP Laravel

Laravel 預設提供了 3 種身份驗證方式,分別為 authauth.basicguest,並透過 middleware 提供我們使用。

不過通常我們在提供 API 時會採用 JWT 來實作所需要的身份驗證功能,在 Laravel 中我們通常會使用 tymon/jwt-auth 來實作 JWT,以下就讓我們一起來實作吧。

本文實作時採用的是 Laravel 7.15.0tymon/jwt-auth 1.0.0

繼續閱讀
上一頁 下一頁