API Αναφορών SonarQube#
Αυτό το άρθρο περιγράφει πώς να έχετε προγραμματιστική πρόσβαση στις αναφορές ασφαλείας SonarQube που αποθηκεύονται στην πλατφόρμα Procurize. Καλύπτει το REST API για την καταγραφή των αναφορών και τη λήψη τους σε μορφές HTML, PDF και ZIP.
Επισκόπηση#
Το υπομοντέλο SonarQube Reports επιτρέπει σε οργανισμούς να αποθηκεύουν κεντρικά και να διαχειρίζονται αναφορές ασφαλείας και ποιότητας κώδικα που δημιουργούνται από το SonarQube. Η πλατφόρμα Procurize εκθέτει αυτά τα δεδομένα μέσω ενός δημόσιου REST API που επιτρέπει:
- Καταγραφή μεταδεδομένων αναφορών για έναν οργανισμό, μια ομάδα έργων ή ένα έργο
- Λήψη μιας μεμονωμένης αναφοράς σε HTML, PDF ή μορφή ZIP
- Λήψη επιλεγμένων αναφορών ως αρχείο ZIP
- Λήψη όλων των αναφορών ενός έργου ή μιας ομάδας έργων ως αρχείο ZIP
- Λήψη των πιο πρόσφατων αναφορών OWASP Top 10 και CWE Top 25 απευθείας από μια υπηρεσία SonarQube
Αυτές οι δυνατότητες επιτρέπουν ενσωμάτωση με pipelines CI/CD, συστήματα GRC, εσωτερικούς πίνακες ελέγχου και εργαλεία διαχείρισης κινδύνου τρίτων.
Τελικά σημεία (Endpoints)#
| Τερματικό (Endpoint) | Μέθοδος | Σκοπός |
|---|---|---|
/security/report/list | GET | Καταγραφή μεταδεδομένων αναφορών για το επιλεγμένο πεδίο και έκδοση. |
/security/report/files | GET | Λήψη των επιλεγμένων αναφορών ως αρχείο ZIP. |
/security/report/html | GET | Λήψη μιας μεμονωμένης αναφοράς σε HTML. |
/security/report/pdf | GET | Λήψη μιας μεμονωμένης αναφοράς σε PDF. |
/security/report/zip | GET | Λήψη μιας μεμονωμένης αναφοράς ως αρχείο ZIP. |
/security/report/project-files | GET | Λήψη όλων των αναφορών ενός έργου ως αρχείο ZIP. |
/security/report/directory-files | GET | Λήψη όλων των αναφορών μιας ομάδας έργων (καταλόγου) ως αρχείο ZIP. |
/security/reports/fetch | POST | Λήψη των πιο πρόσφατων αναφορών από μια υπηρεσία SonarQube. |
Αυθεντικοποίηση και Εξουσιοδότηση#
Τα τερματικά λίστας και λήψης αναφορών που περιγράφονται σε αυτό το άρθρο δεν απαιτούν αυθεντικοποίηση.
Το τερματικό POST /security/reports/fetch απαιτεί αυθεντικοποίηση με API token — δείτε την ενότητα API Tokens.
Αναγνωριστικό Οργανισμού (Organization ID)#
Για τις περισσότερες αιτήσεις απαιτείται το αναγνωριστικό του οργανισμού. Μπορείτε να περάσετε είτε το UUID του οργανισμού είτε το ψευδώνυμό του — δείτε την ενότητα Identifiers and Aliases.
Το βρίσκετε στον πίνακα ρυθμίσεων του οργανισμού στο https://dashboard.procurize.ai.
Σημειώστε ότι η πρόσβαση στον πίνακα ρυθμίσεων απαιτεί εξουσιοδότηση, και η πρόσβαση στον πίνακα ρυθμίσεων του οργανισμού απαιτεί ρόλο χρήστη τουλάχιστον Administrator σε εκείνο τον οργανισμό.

Αναγνωριστικά και Ψευδώνυμα (Identifiers and Aliases)#
Οι παράμετροι πεδίου δέχονται είτε το αναγνωριστικό οντότητας (UUID) είτε ένα ανθρώπινα αναγνώσιμο ψευδώνυμο. Τα ψευδώνυμα κάνουν τις αιτήσεις πιο ευανάγνωστες και είναι σταθερά μεταξύ περιβαλλόντων.
| Παράμετρος | Δέχεται | Παραδείγματα ψευδώνυμων |
|---|---|---|
org | ID ή ψευδώνυμο οργανισμού | aspose, groupdocs |
directory | ID ή ψευδώνυμο καταλόγου (ομάδας έργων) | aspose-imaging, groupdocs-annotation |
project | ID ή ψευδώνυμο έργου | aspose-imaging-net, groupdocs-annotation-java |
Για παράδειγμα, τα παρακάτω δύο αιτήματα είναι ισοδύναμα:
curl "https://api.procurize.com/security/report/list?org=00000000-0000-0000-0000-000000000001&version=1.0"
curl "https://api.procurize.com/security/report/list?org=aspose&version=1.0"
Σημείωση: Τα ψευδώνυμα δεν υποστηρίζονται για την παράμετρο
idτων τερματικών μαζικής λήψης. Πρέπει να περάσετε το UUID του καταλόγου ή του έργου σταGET /security/report/project-filesκαιGET /security/report/directory-files.
Βασική Διεύθυνση URL (Base URL)#
Όλα τα τερματικά REST API εξυπηρετούνται κάτω από την ακόλουθη βασική διεύθυνση URL:
https://api.procurize.com
SonarQube Reports REST API#
Λίστα Αναφορών (List Reports)#
Επιστρέφει τις διαθέσιμες αναφορές ασφαλείας για το επιλεγμένο πεδίο και έκδοση, χωρίς τα περιεχόμενα των αρχείων. Χρησιμοποιήστε αυτό το τερματικό για να ανακαλύψετε τα IDs των αναφορών που μπορούν να περαστούν στα τερματικά λήψης.
Τερματικό
GET /security/report/list
Παράμετροι Ερωτήματος
org(προαιρετικό): ID ή ψευδώνυμο οργανισμού (π.χ.asposeήgroupdocs). Το ευρύτερο πεδίο.directory(προαιρετικό): ID ή ψευδώνυμο καταλόγου (ομάδας έργων) (π.χ.aspose-imagingήgroupdocs-annotation). Περισσότερο περιορισμένο πεδίο.project(προαιρετικό): ID ή ψευδώνυμο έργου (π.χ.aspose-imaging-netήgroupdocs-annotation-java). Το πιο περιορισμένο πεδίο.version(προαιρετικό): Ακριβής έκδοση έργου.minver(προαιρετικό): Ελάχιστη έκδοση έργου.maxver(προαιρετικό): Μέγιστη έκδοση έργου.
Απαιτείται τουλάχιστον μία από τις παραμέτρους πεδίου org, directory ή project. Η προτεραιότητα είναι: αν δοθεί project, αναζητείται μόνο αυτό το έργο· διαφορετικά, αν δοθεί directory, αναζητείται ολόκληρη η ομάδα έργων· διαφορετικά, αναζητείται ολόκληρος ο οργανισμός (org). Όταν το org δίνεται μαζί με project ή directory, το στόχο επαληθεύεται επιπλέον ότι ανήκει στον συγκεκριμένο οργανισμό.
Απαιτείται τουλάχιστον μία από τις παραμέτρους version, minver ή maxver. Αν δοθεί version, οι minver και maxver αγνοούνται.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/list?org=aspose&version=1.0"
Σκοπός σε ομάδα έργων ή έργο με ψευδώνυμο:
curl "https://api.procurize.com/security/report/list?directory=aspose-imaging&minver=1.0&maxver=2.0"
curl "https://api.procurize.com/security/report/list?project=aspose-imaging-net&version=1.0"
Παράδειγμα Απάντησης
{
"organizationId": "00000000-0000-0000-0000-000000000001",
"reports": [
{
"projectName": "Test product",
"id": "00000000-0000-0000-0000-000000000002",
"reportType": "CWE Top 25",
"reportVersion": 2024,
"projectVersion": "1.0",
"date": "2025-12-17T09:05:48.5946432+00:00",
"uploadDate": "2025-12-17T09:05:48.5946432+00:00",
"vulnerabilitiesCount": 0,
"securityRating": "A"
}
]
}
Πεδία Απάντησης
organizationId: Ο οργανισμός στον οποίο ανήκουν οι αναφορές.reports[].id: Μοναδικό ID αναφοράς. Χρησιμοποιήστε το στα τερματικά λήψης.reports[].projectName: Εμφανιζόμενο όνομα προϊόντος.reports[].projectVersion: Έκδοση προϊόντος.reports[].reportType: Τύπος αναφοράς (OWASP Top 10ήCWE Top 25).reports[].reportVersion: Έτος έκδοσης του πρότυπου αναφοράς.reports[].date: Ημερομηνία δημιουργίας της αναφοράς.reports[].uploadDate: Ημερομηνία μεταφόρτωσης της αναφοράς στην Procurize.reports[].vulnerabilitiesCount: Αριθμός ευπαθειών που βρέθηκαν.reports[].securityRating: Συνολική βαθμολογία ασφαλείας (A–E, όπου τοAείναι το καλύτερο).
Λήψη Αναφορών με ID (Download Reports by ID)#
Κατεβάζει ένα αρχείο ZIP που περιέχει τις επιλεγμένες αναφορές. Κάθε αναφορά περιλαμβάνει τόσο την HTML όσο και την PDF μορφή.
Τερματικό
GET /security/report/files
Παράμετροι Ερωτήματος
org(απαιτείται): ID ή ψευδώνυμο οργανισμού (π.χ.asposeήgroupdocs).reports(απαιτείται): IDs των αναφορών που θα συμπεριληφθούν. Επαναλάβετε την παράμετρο για πολλαπλές αναφορές.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/files?org=aspose&reports=00000000-0000-0000-0000-000000000002&reports=00000000-0000-0000-0000-000000000003" -o reports.zip
Απάντηση
- Content-Type:
application/zip - Το σώμα της απάντησης περιέχει το δυαδικό αρχείο ZIP.
Οι πελάτες πρέπει να ρέουν (stream) την απάντηση και να την αποθηκεύουν στο δίσκο.
Εργασία με Μία Μοναδική Αναφορά#
Τα τερματικά /security/report/html, /security/report/pdf και /security/report/zip επιστρέφουν μία συγκεκριμένη αναφορά και μοιράζονται τους ίδιους κανόνες επιλογής.
Επιλογή Αναφοράς#
Ο τύπος και η έκδοση της αναφοράς είναι πάντα υποχρεωτικά:
rt(απαιτείται): Τύπος αναφοράς. Υποστηριζόμενες τιμές είναιOWASP Top 10καιCWE Top 25.rv(απαιτείται): Έτος έκδοσης της αναφοράς, π.χ.2025για OWASP Top 10 ή2024για CWE Top 25.
Η ακριβής αναφορά επιλέγεται με έναν από τους δύο τρόπους:
- Με ID αναφοράς — περάστε
id(ID αναφοράς) μαζί με είτεproject(ID ή ψευδώνυμο έργου) είτεorg(ID ή ψευδώνυμο οργανισμού). Μην περάσετεversionσε αυτή τη λειτουργία. - Με έκδοση έργου — περάστε
project(ID ή ψευδώνυμο έργου, π.χ.aspose-imaging-netήgroupdocs-annotation-java) καιversion(έκδοση έργου). Η παράμετροςorgδεν χρησιμοποιείται σε αυτή τη λειτουργία.
Όταν δοθούν και project και org, το org αγνοείται.
Λήψη Αναφοράς ως HTML#
Αποδίδει μία αναφορά ως σελίδα HTML ή την επιστρέφει ως αρχείο λήψης HTML.
Τερματικό
GET /security/report/html
Παράμετροι Ερωτήματος
rt(απαιτείται): Τύπος αναφοράς.rv(απαιτείται): Έτος έκδοσης.- Παράμετροι επιλογής αναφοράς: δείτε την ενότητα Επιλογή Αναφοράς.
download(προαιρετικό): Ορίστε σεtrueγια λήψη του HTML ως αρχείο (Content-Disposition: attachment). Αν λείπει ή είναιfalse, η αναφορά επιστρέφεται ενσωματωμένη (inline).
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/html?rt=OWASP+Top+10&rv=2025&id=00000000-0000-0000-0000-000000000004&project=aspose-imaging-net"
Για λήψη του αρχείου HTML αντί για ενσωμάτωση:
curl "https://api.procurize.com/security/report/html?rt=OWASP+Top+10&rv=2025&project=aspose-imaging-net&version=1.0&download=true" -o report.html
Απάντηση
- Content-Type:
text/html
Λήψη Αναφοράς ως PDF#
Επιστρέφει μία αναφορά ως έγγραφο PDF.
Τερματικό
GET /security/report/pdf
Παράμετροι Ερωτήματος
rt(απαιτείται): Τύπος αναφοράς.rv(απαιτείται): Έτος έκδοσης.- Παράμετροι επιλογής αναφοράς: δείτε την ενότητα Επιλογή Αναφοράς.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/pdf?rt=CWE+Top+25&rv=2024&project=aspose-imaging-net&version=1.0" -o report.pdf
Απάντηση
- Content-Type:
application/pdf
Λήψη Αναφοράς ως ZIP#
Επιστρέφει μία αναφορά ως αρχείο ZIP που περιέχει τόσο την HTML όσο και την PDF έκδοση.
Τερματικό
GET /security/report/zip
Παράμετροι Ερωτήματος
rt(απαιτείται): Τύπος αναφοράς.rv(απαιτείται): Έτος έκδοσης.- Παράμετροι επιλογής αναφοράς: δείτε την ενότητα Επιλογή Αναφοράς.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/zip?rt=CWE+Top+25&rv=2024&id=00000000-0000-0000-0000-000000000004&org=groupdocs" -o report.zip
Απάντηση
- Content-Type:
application/zip
Λήψη Όλων των Αναφορών ενός Έργου#
Κατεβάζει ένα αρχείο ZIP που περιέχει όλες τις αναφορές του συγκεκριμένου έργου, τόσο σε HTML όσο και σε PDF.
Τερματικό
GET /security/report/project-files
Παράμετροι Ερωτήματος
id(απαιτείται): ID έργου. Τα ψευδώνυμα δεν υποστηρίζονται· περάστε το UUID του έργου.rt(προαιρετικό): Φίλτρο κατά τύπο αναφοράς. Υποστηριζόμενες τιμές:OWASP Top 10καιCWE Top 25.rv(προαιρετικό): Φίλτρο κατά έτος έκδοσης αναφοράς.version(προαιρετικό): Φίλτρο κατά έκδοση έργου.
Αν δεν δοθούν φίλτρα, συμπεριλαμβάνονται όλες οι αναφορές του έργου. Οι παράμετροι φίλτρου μπορούν να συνδυαστούν και εφαρμόζονται ανεξάρτητα.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/project-files?id=00000000-0000-0000-0000-000000000005" -o project-reports.zip
Απάντηση
- Content-Type:
application/zip
Λήψη Όλων των Αναφορών μιας Ομάδας Έργων#
Κατεβάζει ένα αρχείο ZIP που περιέχει τις αναφορές όλων των έργων στον καθορισμένο κατάλογο (ομάδα έργων), τόσο σε HTML όσο και σε PDF.
Τερματικό
GET /security/report/directory-files
Παράμετροι Ερωτήματος
id(απαιτείται): ID καταλόγου (ομάδας έργων). Τα ψευδώνυμα δεν υποστηρίζονται· περάστε το UUID του καταλόγου.rt(προαιρετικό): Φίλτρο κατά τύπο αναφοράς. Υποστηριζόμενες τιμές:OWASP Top 10καιCWE Top 25.rv(προαιρετικό): Φίλτρο κατά έτος έκδοσης αναφοράς.version(προαιρετικό): Φίλτρο κατά έκδοση έργου.
Αν δεν δοθούν φίλτρα, συμπεριλαμβάνονται οι αναφορές όλων των έργων του καταλόγου. Οι παράμετροι φίλτρου μπορούν να συνδυαστούν και εφαρμόζονται ανεξάρτητα.
Παράδειγμα Αιτήματος
curl "https://api.procurize.com/security/report/directory-files?id=00000000-0000-0000-0000-000000000006" -o directory-reports.zip
Απάντηση
- Content-Type:
application/zip
Λήψη Αναφορών από SonarQube (Fetch Reports from SonarQube)#
Ανεβάζει τα πιο πρόσφατα δεδομένα αναφοράς ασφαλείας για ένα προϊόν από μια υπηρεσία SonarQube στην Procurize. Η υπηρεσία ανακτά τα πιο πρόσφατα δεδομένα ζητημάτων από το SonarQube, τα μετατρέπει σε JSON αναπαραστάσεις των τελευταίων εκδόσεων των αναφορών OWASP Top 10 και CWE Top 25, και τα επιστρέφει στην απάντηση.
Τερματικό
POST /security/reports/fetch
Αυθεντικοποίηση
Απαιτείται API token, που περνιέται στην κεφαλίδα X-API-Key. Για λεπτομέρειες σχετικά με τη δημιουργία και χρήση tokens, δείτε την ενότητα API Tokens.
Παράμετροι Ερωτήματος
Η πηγή SonarQube επιλέγεται με έναν από τους δύο τρόπους:
- Με έργο — περάστε
project(ID ή ψευδώνυμο έργου — δείτε την ενότητα Identifiers and Aliases). Μην περάσετεurlήkey. - Με υπηρεσία SonarQube — περάστε ταυτόχρονα
url(URL της υπηρεσίας SonarQube) καιkey(κλειδί έργου SonarQube). Μην περάσετεproject.
Παράδειγμα Αιτήματος
Λήψη αναφοράς για έργο με ψευδώνυμο:
curl -X POST "https://api.procurize.com/security/reports/fetch?project=aspose-imaging-net" \
-H "X-API-Key: YOUR_API_TOKEN"
Λήψη αναφοράς απευθείας από υπηρεσία SonarQube:
curl -X POST "https://api.procurize.com/security/reports/fetch?url=https://sonarqube.example.com&key=my-project-key" \
-H "X-API-Key: YOUR_API_TOKEN"
Παράδειγμα Απάντησης
{
"Owasp10_2025": {
"TOTAL_SECURITY_RATING": "A",
"TOTAL_COUNT": 0,
...
},
"Cwe25_2025": {
"TOTAL_SECURITY_RATING": "A",
"TOTAL_COUNT": 0,
...
}
}
Η απάντηση είναι χρήσιμη σε pipelines εκδόσεων για να αποφασιστεί εάν θα σταματήσει η κατασκευή όταν εντοπιστούν ευπάθειες στα δημόσια πρότυπα αναφορών ασφαλείας.
Σημειώσεις
- Η μεταφόρτωση μιας αναφοράς απαιτεί προσωπική άδεια για το προϊόν στο οποίο ανήκουν οι αναφορές. Αν δεν διαθέτετε αυτήν την άδεια, στείλτε την αίτηση ούτως ή άλλως: η πλατφόρμα θα επιστρέψει
403 Forbiddenκαι θα ειδοποιήσει αυτόματα τους διαχειριστές της πλατφόρμας, οι οποίοι θα εξετάσουν το αίτημα και θα σας ενημερώσουν για την απόφαση. - Δεν είναι απαραίτητο κάθε SonarQube service να είναι καταχωρημένο στην πλατφόρμα Procurize. Για την καταχώρηση νέας υπηρεσίας, επικοινωνήστε με τον διαχειριστή της πλατφόρμας· απαιτείται token διαχειριστή για τη συγκεκριμένη υπηρεσία.
Διαχείριση Σφαλμάτων (Error Handling)#
Το API χρησιμοποιεί τυπικούς κωδικούς κατάστασης HTTP.
200 OK: Η αίτηση ήταν επιτυχής204 No Content: Η αναφορά δεν υπάρχει400 Bad Request: Μη έγκυρες παράμετροι ή κακή μορφή αίτησης401 Unauthorized: Λείπει ή είναι μη έγκυρο το API token403 Forbidden: Άρνηση πρόσβασης (π.χ. έλλειψη άδειας για το προϊόν)500 Internal Server Error: Απρόσμενο σφάλμα διακομιστή
Οι απαντήσεις σφαλμάτων περιλαμβάνουν κωδικό σφάλματος μηχανής και ανθρώπινο μήνυμα.
