Michael Stapelberg: Debian Code Search: OpenAPI now available
Debian Code Search now offers an OpenAPI-based API!
Various developers have created ad-hoc client libraries based on how the web
interface works.
The goal of offering an OpenAPI-based API is to provide developers with
automatically generated client libraries for a large number of programming
languages, that target a stable interface independent of the web interface s
implementation details.
Getting started
If you find any others, please point them to this post in case they are not
using Debian Code Search s OpenAPI yet.
Getting started
- Visit https://codesearch.debian.net/apikeys/ to download your personal API
key. Login via Debian s GitLab instance
salsa.debian.org; register there if you have no
account yet.
- Find the Debian Code Search client library for your programming language. If
none exists yet, auto-generate a client library on editor.swagger.io: click
Generate
Client .
- Search all code in Debian from your own analysis tool, migration tracking
dashboard, etc.
curl example
curl \
-H "x-dcs-apikey: $(cat dcs-apikey-stapelberg.txt)" \
-X GET \
"https://codesearch.debian.net/api/v1/search?query=i3Font&match_mode=regexp"
Web browser example
You can try out the API in your web browser in the OpenAPI
documentation.
Code example (Go)
Here s an example program that demonstrates how to set up an auto-generated Go
client for the Debian Code Search OpenAPI, run a query, and aggregate the results:
func burndown() error
cfg := openapiclient.NewConfiguration()
cfg.AddDefaultHeader("x-dcs-apikey", apiKey)
client := openapiclient.NewAPIClient(cfg)
ctx := context.Background()
// Search through the full Debian Code Search corpus, blocking until all
// results are available:
results, _, err := client.SearchApi.Search(ctx, "fmt.Sprint(err)", &openapiclient.SearchApiSearchOpts
// Literal searches are faster and do not require escaping special
// characters, regular expression searches are more powerful.
MatchMode: optional.NewString("literal"),
)
if err != nil
return err
// Print to stdout a CSV file with the path and number of occurrences:
wr := csv.NewWriter(os.Stdout)
header := []string "path", "number of occurrences"
if err := wr.Write(header); err != nil
return err
occurrences := make(map[string]int)
for _, result := range results
occurrences[result.Path]++
for _, result := range results
o, ok := occurrences[result.Path]
if !ok
continue
// Print one CSV record per path:
delete(occurrences, result.Path)
record := []string result.Path, strconv.Itoa(o)
if err := wr.Write(record); err != nil
return err
wr.Flush()
return wr.Error()
The full example can be found under
burndown.go
.
Feedback?
File a GitHub issue on
github.com/Debian/dcs
please!
Migration status
I m aware of the following third-party projects using Debian Code
Search:
curl \
-H "x-dcs-apikey: $(cat dcs-apikey-stapelberg.txt)" \
-X GET \
"https://codesearch.debian.net/api/v1/search?query=i3Font&match_mode=regexp"
Web browser example
You can try out the API in your web browser in the OpenAPI
documentation.
Code example (Go)
Here s an example program that demonstrates how to set up an auto-generated Go
client for the Debian Code Search OpenAPI, run a query, and aggregate the results:
func burndown() error
cfg := openapiclient.NewConfiguration()
cfg.AddDefaultHeader("x-dcs-apikey", apiKey)
client := openapiclient.NewAPIClient(cfg)
ctx := context.Background()
// Search through the full Debian Code Search corpus, blocking until all
// results are available:
results, _, err := client.SearchApi.Search(ctx, "fmt.Sprint(err)", &openapiclient.SearchApiSearchOpts
// Literal searches are faster and do not require escaping special
// characters, regular expression searches are more powerful.
MatchMode: optional.NewString("literal"),
)
if err != nil
return err
// Print to stdout a CSV file with the path and number of occurrences:
wr := csv.NewWriter(os.Stdout)
header := []string "path", "number of occurrences"
if err := wr.Write(header); err != nil
return err
occurrences := make(map[string]int)
for _, result := range results
occurrences[result.Path]++
for _, result := range results
o, ok := occurrences[result.Path]
if !ok
continue
// Print one CSV record per path:
delete(occurrences, result.Path)
record := []string result.Path, strconv.Itoa(o)
if err := wr.Write(record); err != nil
return err
wr.Flush()
return wr.Error()
The full example can be found under
burndown.go
.
Feedback?
File a GitHub issue on
github.com/Debian/dcs
please!
Migration status
I m aware of the following third-party projects using Debian Code
Search:
func burndown() error
cfg := openapiclient.NewConfiguration()
cfg.AddDefaultHeader("x-dcs-apikey", apiKey)
client := openapiclient.NewAPIClient(cfg)
ctx := context.Background()
// Search through the full Debian Code Search corpus, blocking until all
// results are available:
results, _, err := client.SearchApi.Search(ctx, "fmt.Sprint(err)", &openapiclient.SearchApiSearchOpts
// Literal searches are faster and do not require escaping special
// characters, regular expression searches are more powerful.
MatchMode: optional.NewString("literal"),
)
if err != nil
return err
// Print to stdout a CSV file with the path and number of occurrences:
wr := csv.NewWriter(os.Stdout)
header := []string "path", "number of occurrences"
if err := wr.Write(header); err != nil
return err
occurrences := make(map[string]int)
for _, result := range results
occurrences[result.Path]++
for _, result := range results
o, ok := occurrences[result.Path]
if !ok
continue
// Print one CSV record per path:
delete(occurrences, result.Path)
record := []string result.Path, strconv.Itoa(o)
if err := wr.Write(record); err != nil
return err
wr.Flush()
return wr.Error()
burndown.go
.
Feedback?
File a GitHub issue on
github.com/Debian/dcs
please!
Migration status
I m aware of the following third-party projects using Debian Code
Search:
Tool | Migration status |
---|---|
Debian Code Search CLI tool | Updated to OpenAPI |
identify-incomplete-xs-go-import-path | Update pending |
gnome-codesearch | makes no API queries |